在Android中,如何将价值从活动传递到服务?

在Android中,如何将价值从活动传递到服务?,android,android-activity,android-service,Android,Android Activity,Android Service,我需要访问一个包含editText元素值的简单int变量。该值作为公共字段存储在我的活动类中。在我的服务中,我从活动类创建了一个对象: CheckActivity check = new CheckActivity(); 我正试图通过以下方式访问它: check.getFirstPosition(); 但它返回零。我应该如何将值从活动传递到服务 CheckActivity check=新的CheckActivity() 永远不要这样做。使用Intent创建活动 我应该如何将值从活动传递到服务

我需要访问一个包含editText元素值的简单int变量。该值作为公共字段存储在我的活动类中。在我的服务中,我从活动类创建了一个对象:

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);