通常对于单个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"));
然后用:
启动IntentServiceIntent 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
个接收器吗?
答案 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添加到您的广播接收器,以区分您正在接收广播的服务。