通常对于单个 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);
在 list 文件中,您为您的服务添加:
<service
android:name=".MyIntentService"
android:exported="false" />
我想在同一个 Activity 中接收来自多个 IntentService 的广播。
每个 IntentService 都需要一个接收器吗?比如,如果我制作 n
IntentServices,我是否需要注册 n
接收器,制作 n
监听器,并取消注册 n
onDestroy 中的接收器?
最佳答案
用一个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
}
}
};
关于android - 一个 BroadcastReceiver 可以用于多个 IntentServices 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40075354/