服务如何将结果返回给活动

Ale*_*oke 28 service notifications android android-activity

我似乎有一个经典的任务,但我找不到任何关于如何做的例子.

我想下载一些东西.好吧,我称之为网络服务并得到回复...但它几乎是一样的.

为了做到这一点,我有一个活动,启动一个服务,产生一个完成工作的线程.

现在我想使用我在启动服务的活动中获得的数据.

(我假设开始另一个活动来处理显示结果的工作很简单)

我的问题是服务如何通知某个活动(启动它或另一个活动的活动)?

任何指向示例的指针都非常感谢.

问候

JDe*_*ais 57

根据Google文档,如果您ActivityService他们在同一个应用程序中,使用LocalBroadcastManager优于sendBroadcast(意图),因为发送的信息不会通过系统,这消除了拦截的风险.

它很容易使用.

在您的活动中,BroadcastReceiver在onResume()方法中创建并动态添加侦听器:

private BroadcastReceiver  bReceiver = new BroadcastReceiver(){

    @Override
    public void onReceive(Context context, Intent intent) {
        //put here whaterver you want your activity to do with the intent received
    }           
};

protected void onResume(){
    super.onResume();
    LocalBroadcastManager.getInstance(this).registerReceiver(bReceiver, new IntentFilter("message"));
}

protected void onPause (){
    super.onPause();
 LocalBroadcastManager.getInstance(this).unregisterReceiver(bReceiver);
}
Run Code Online (Sandbox Code Playgroud)

在您的服务中,您将获得LocalBroadcastManager的实例并使用它来发送意图.我通常把它放在自己的方法中,如下所示:

private void sendBroadcast (boolean success){
    Intent intent = new Intent ("message"); //put the same message as in the filter you used in the activity when registering the receiver
    intent.putExtra("success", success);
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
Run Code Online (Sandbox Code Playgroud)


fpa*_*zza 8

通过sendBroadcast()发送广播Intent与数据,该活动通过BroadcastReceiver发送.

这是一个例子:https://github.com/commonsguy/cw-android/tree/master/Service/WeatherAPI Doc:http: //developer.android.com/reference/android/content/BroadcastReceiver.html