Android 动态广播接收器:LocalBroadcastManager.registerReceiver vs registerReceiver

Android 动态广播接收器:LocalBroadcastManager.registerReceiver vs registerReceiver,android,broadcastreceiver,Android,Broadcastreceiver,我正在尝试从具有两个不同接收器的服务接收广播。一个接收者更新是一个视图,所以我在活动的onResume方法中注册它 当应用程序不在前台时,我使用另一个接收器,以便在后台服务完成时显示系统通知 下面的代码是我注册收件人的方式: @Override protected void onPause() { // unregister local unregisterReceiver(localReceiver); // register remote registerR

我正在尝试从具有两个不同接收器的服务接收广播。一个接收者更新是一个视图,所以我在活动的onResume方法中注册它

当应用程序不在前台时,我使用另一个接收器,以便在后台服务完成时显示系统通知

下面的代码是我注册收件人的方式:

@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
注册的接收器广播?他们不会收听定期广播。答案是否定的。我会用这个细节更新我的问题。