在Android中,如何将价值从活动传递到服务?
我需要访问一个包含editText元素值的简单int变量。该值作为公共字段存储在我的活动类中。在我的服务中,我从活动类创建了一个对象:在Android中,如何将价值从活动传递到服务?,android,android-activity,android-service,Android,Android Activity,Android Service,我需要访问一个包含editText元素值的简单int变量。该值作为公共字段存储在我的活动类中。在我的服务中,我从活动类创建了一个对象: CheckActivity check = new CheckActivity(); 我正试图通过以下方式访问它: check.getFirstPosition(); 但它返回零。我应该如何将值从活动传递到服务 CheckActivity check=新的CheckActivity() 永远不要这样做。使用Intent创建活动 我应该如何将值从活动传递到服务
CheckActivity check = new CheckActivity();
我正试图通过以下方式访问它:
check.getFirstPosition();
但它返回零。我应该如何将值从活动传递到服务
CheckActivity check=新的CheckActivity()
永远不要这样做。使用Intent
创建活动
我应该如何将值从活动传递到服务
您可以使用context.startService()
方法通过Intent
传递它。或者,您可以绑定到它并通过引用传递值
您还可以考虑使用<代码>广播接收器< /> >或<代码>汉德勒< /C> > 您需要使用不同的Android组件之间传递数据的意图,如<代码>活动< /代码>或<代码>服务< /代码> .<
Intent intent = new Intent(this, YourService.class);
intent.putExtra("your_key_here", <your_value_here>);
现在,您可以使用onBind()
或onStartCommand()
(取决于您使用服务的方式)使用作为参数传递的intent
String editTextValue = intent.getStringExtra("your_key_here");
您现在可以在任何地方使用
editTextValue
。您不能从您的服务中创建这样的对象。我想你对Java还是新手。执行CheckActivity check=new CheckActivity()
时,将创建CheckActivity
的新实例,毫无疑问它将返回零。此外,您不应该尝试在android中创建这样的活动对象
就您的问题而言,您可以通过广播接收器将editText值传递给您的服务
看一看
另外,如果您在创建服务之前具有editText值,则可以将其作为传递,否则可以使用广播方法
为您效劳
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equalsIgnoreCase("getting_data")) {
intent.getStringExtra("value")
}
}
};
IntentFilter intentFilter = new IntentFilter();
// set the custom action
intentFilter.addAction("getting_data"); //Action is just a string used to identify the receiver as there can be many in your app so it helps deciding which receiver should receive the intent.
// register the receiver
registerReceiver(broadcastReceiver, intentFilter);
在你的活动中
Intent broadcast1 = new Intent("getting_data");
broadcast.putExtra("value", editext.getText()+"");
sendBroadcast(broadcast1);
还可以在onCreate of activity中声明接收者,并在onDestroy中注销它
unregisterReceiver(broadcastReceiver);
这是一个大问题。服务可以绑定或启动,在相同的过程中,您只需在单独的服务中的任一侧(服务或活动)使用公共静态变量即可。您可以使用Messenger或AIDL,方法是将活动作为意图启动,而不是CheckActivity check=new CheckActivity();使变量静态工作,谢谢。只是好奇,我如何使用服务类上的广播接收器直接从某个活动类访问editText值?在服务中声明广播接收器,如教程所示。然后从您的活动传递一个意图,并将动作设置为广播接收器的意图。在你的服务中,意图将在你的接收器中被接收,你可以从那里提取价值。这是非常基本的东西。如果你觉得答案有用,请投票/接受。谢谢你的详细解释。使变量为静态对我来说很有用,但我真的很喜欢你的方法。但是你是如何通过创建活动对象来做到这一点的呢?Thnx用于接受btw@varunkr我不愿意尽可能多地使用静态的唯一原因是,这些值在整个应用程序中持续存在并保持可用,直到应用程序被终止,并且该值有时可能是,也可能不是您在稍后阶段所期望的值。您可以通过服务的生命周期方法获取意图对象,但与活动不同,服务没有getIntent()方法。
unregisterReceiver(broadcastReceiver);