如何注销连接到 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;
}
希望您的问题得到解决。我在我的应用程序中以这种方式解决了这个错误。试一试,然后回复我。
如何注销连接到 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;
}
希望您的问题得到解决。我在我的应用程序中以这种方式解决了这个错误。试一试,然后回复我。