Android 动态广播接收器:LocalBroadcastManager.registerReceiver vs registerReceiver
我正在尝试从具有两个不同接收器的服务接收广播。一个接收者更新是一个视图,所以我在活动的onResume方法中注册它 当应用程序不在前台时,我使用另一个接收器,以便在后台服务完成时显示系统通知 下面的代码是我注册收件人的方式:Android 动态广播接收器:LocalBroadcastManager.registerReceiver vs registerReceiver,android,broadcastreceiver,Android,Broadcastreceiver,我正在尝试从具有两个不同接收器的服务接收广播。一个接收者更新是一个视图,所以我在活动的onResume方法中注册它 当应用程序不在前台时,我使用另一个接收器,以便在后台服务完成时显示系统通知 下面的代码是我注册收件人的方式: @Override protected void onPause() { // unregister local unregisterReceiver(localReceiver); // register remote registerR
@Override
protected void onPause() {
// unregister local
unregisterReceiver(localReceiver);
// register remote
registerReceiver(remoteReceiver, filter);
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
// remove remote receiver
// since remote is only registered in onPause it won't be registered during the first onResume call
// so we want to ignore any exceptions
try {
unregisterReceiver(remoteReceiver);
} catch (IllegalArgumentException e) {
Log.e(LOG_TAG, "No receiver registered, could be first time");
}
// add local receiver
registerReceiver(localReceiver, filter);
Log.i(LOG_TAG, "resumed. should be registered");
}
这两个接收器在Activity类的顶部被实例化如下:
BroadcastReceiver localReceiver = new BroadcastReceiver() { ... };
WaitTimeReceiver remoteReceiver = new WaitTimeReceiver();
该服务的目的是:
broadcastIntent = new Intent(Support.SERVICE_BR);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
// later on sends using
sendBroadcast(broadcastIntent);
“活动”中的筛选器将匹配:
filter.addAction(Support.SERVICE_BR);
filter.addCategory(Intent.CATEGORY_DEFAULT);
上面的一切都正常暂停恢复功能正常工作,但我的问题是为什么LocalBroadcastManager没有正常工作
使用LocalBroadcastManager lbm=LocalBroadcastManager.getInstance(this)
然后调用lbm.registerReceiver(localReceiver)
都没有收到我的任何广播
为什么LocalBroadcastManager没有接收到我的任何广播?
BroadcastReceiver
在LocalBroadcastManager
注册的只能接收使用LocalBroadcastManager
发送的广播。使用活动
或服务
的sendBroadcast()
方法发送的广播不能被LocalBroadcastManager
接收器接收
改用LocalBroadcastManager#sendBroadcast()
方法。例如:
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
您是否正在使用
LocalBroadcastManager.getInstance(this).sendBroadcast()
向您在LocalBroadcastManager
注册的接收器广播?他们不会收听定期广播。答案是否定的。我会用这个细节更新我的问题。