如何注销连接到 LocalBroadcastManager 的接收器?

How to unregister receiver attached to LocalBroadcastManager?

如何注销连接到 LocalBroadcastManager 的接收器?

我试过了

unregisterReceiver(broadcastReceiver);

但它给了我一个例外

java.lang.IllegalArgumentException: Receiver not registered:

这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiverCancelPd, new IntentFilter(PelicanApplication.identifierCancelPd));
    LocalBroadcastManager.getInstance(this).registerReceiver(bReceiverSignOut, new IntentFilter(PelicanApplication.identifierSignOut));
    LocalBroadcastManager.getInstance(this).registerReceiver(bReceiverNearByDeliveries, new IntentFilter(PelicanApplication.identifierNBD));
}


@Override
protected void onStop() {
    super.onStop();
    unregisterReceiver(broadcastReceiverCancelPd);
    unregisterReceiver(bReceiverSignOut);
    unregisterReceiver(bReceiverNearByDeliveries);
}

将您的 unregisterReceiver() 功能移动到 onDestroy()

像您一样调用 unregisterReceiver() 是在当前上下文而不是 LocalBroadcastManager 上调用该方法。您需要致电 LocalBroadcastManager.getInstance(this).unregisterReceiver();.

停止时做这样的事情

LocalBroadcastManager.getInstance(context).unregisterReceiver(this);

对于 Activity:

为了在您的应用程序中注册您的广播接收器,首先,从您的 AndroidManifest.xml 文件中删除标签。然后,在您的 onResume() 中调用 registerReceiver(BroadcastReceiver receiver, IntentFilter filter)。在 onPause() 中使用 unregisterReceiver(BroadcastReceiver receiver) 取消注册广播接收器。

对于服务: 从清单文件中删除接收者标签。然后,您可以在 onCreate() 中使用相同的方法注册您的广播接收器,并在 onDestroy() 中取消注册。

我认为您的应用在这一行崩溃:

unregisterReceiver(batteryNotifyReceiver);

如果接收者未注册或已经取消注册,则调用 unregisterReceiver() 会抛出 IllegalArgumentException。 因此,您必须在取消注册呼叫之前检查接收器是否已注册。

if (batteryNotifyReceiver!= null) {
                    unregisterReceiver(batteryNotifyReceiver);
                    batteryNotifyReceiver= null;
            }

希望您的问题得到解决。我在我的应用程序中以这种方式解决了这个错误。试一试,然后回复我。