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

Can one BroadcastReceiver be used for multiple IntentServices?

通常对于单个 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 中接收来自多个 IntentService 的广播。

每个 IntentService 需要一个接收器吗?比如,如果我制作 n IntentServices,我是否需要注册 n 接收器,制作 n 侦听器,并在 onDestroy 中注销 n 接收器?

是的,您可以在一个 activity 中使用一个广播接收器,这将处理来自不同服务的多个意图。 我建议向您的广播接收器添加多个 intent-filter 以区分您正在接收广播的服务。

用一个BroadcastReceiver过滤多个actions的方法是将它们添加到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
        }
    }
};