动态广播接收器:LocalBroadcastManager.registerReceiver vs registerReceiver [英] Dynamic BroadcastReceivers: LocalBroadcastManager.registerReceiver vs registerReceiver
问题描述
我正在尝试从具有2个不同接收器的服务接收广播.一个接收者更新是一个视图,因此我将其注册到活动的onResume方法中.
I'm trying to receive broadcasts from a service with 2 different receivers. One receiver update's a view so I register it in the activity's onResume method.
当应用程序不在前台时,我使用其他接收器,以便在后台服务完成时显示系统通知.
When the app is not in the foreground I use the other receiver so I can show a system notification when the background service completes.
下面的代码是我注册接收者的方式:
The code below is how I'm registering my receivers:
@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类的顶部,两个接收者的实例化如下:
The two receiver's are instantiated like this at the top of the Activity class:
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);
使活动"中的过滤器匹配:
The Filter in the Activity is made to match:
filter.addAction(Support.SERVICE_BR);
filter.addCategory(Intent.CATEGORY_DEFAULT);
上面的所有方法都可以正常工作,暂停恢复功能可以按预期工作,但是我的问题是为什么LocalBroadcastManager不能正常工作?
Everything above is working the pause resume functionality works as expected, but my question is why the LocalBroadcastManager was not?
使用LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this)
然后调用lbm.registerReceiver(localReceiver)
均未收到我的任何广播.
Using LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this)
and then calling lbm.registerReceiver(localReceiver)
was not receiving any of my broadcasts for either.
为什么LocalBroadcastManager没有收到我的任何广播?
Why wasn't the LocalBroadcastManager receiving any of my broadcasts?
推荐答案
BroadcastReceiver
仅可以接收通过LocalBroadcastManager
发送的广播. LocalBroadcastManager
接收器无法接收使用Activity
或Service
的sendBroadcast()
方法发送的广播.
BroadcastReceiver
s registered with LocalBroadcastManager
can only receive broadcasts sent with LocalBroadcastManager
. Broadcasts sent with an Activity
's or Service
's sendBroadcast()
method cannot be received by LocalBroadcastManager
Receivers.
请改用LocalBroadcastManager#sendBroadcast()
方法.例如:
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
这篇关于动态广播接收器:LocalBroadcastManager.registerReceiver vs registerReceiver的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!