一个BroadcastReceiver可以用于多个IntentServices吗?

时间:2016-10-16 20:53:55

标签: android broadcastreceiver listener intentservice

通常对于单个IntentService,您可以在Activity的onCreate()方法中定义广播接收器侦听器(例如)

broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        //get stuff from the intent and do whatever you want  
    }
};

你注册这样的接收器(也在onCreate()中):

LocalBroadcastManager.getInstance(this)
    .registerReceiver(broadcastReceiver, new IntentFilter("my_intent_service"));

然后用:

启动IntentService
Intent intent = new Intent(this, MyIntentService.class);
startService(intent);

在IntentService中,您使用以下命令将消息发送回接收方:

Intent broadcastIntent = new Intent("my_intent_service");
broadcastIntent.putExtra("whateverData", whateverData);
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent);

触发前面描述的onReceive方法。

然后取消注册接收器,在onDestroy方法中你可以这样做:

  LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);

在清单文件中,您为服务添加:

<service
    android:name=".MyIntentService"
    android:exported="false" />

我想在同一个Activity中接收来自多个IntentServices的广播。

每个IntentService需要一个接收器吗?如同,如果我使n IntentServices,我需要在onDestroy中注册n个接收者,使n个侦听器和取消注册n个接收器吗?

2 个答案:

答案 0 :(得分:4)

使用一个actions过滤多个BroadcastReceiver的方法是将它们添加到IntentFilter中:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("my_intent_service1"); // Action1 to filter
intentFilter.addAction("my_intent_service2"); // Action2 to filter
LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, intentFilter);

在您的BroadcastReceiver

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("my_intent_service1")) {
            // Action 1
        } else if (intent.getAction().equals("my_intent_service2")) {
            // Action 2
        }
    }
};

答案 1 :(得分:3)

是的,你可以在一个活动中使用一个广播接收器,它可以处理不同服务的多个意图。 我建议将多个intentFilter添加到您的广播接收器,以区分您正在接收广播的服务。

相关问题