一个 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
}
}
};
通常对于单个 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
}
}
};