Android 动态注册广播接收器-接收器未注册

Android 动态注册广播接收器-接收器未注册,android,broadcastreceiver,intentfilter,Android,Broadcastreceiver,Intentfilter,我在动态注册BroacasrReceiverCallReceiver时遇到问题。当触发CallReceiver的onReceive方法时,将引发致命异常 ... private boolean isCRRegistered = false; public int onStartCommand (Intent intent, int flags, int startId) { if(!isCRRegistered) { IntentFilter filter2 = n

我在动态注册BroacasrReceiver
CallReceiver
时遇到问题。当触发
CallReceiver
onReceive
方法时,将引发致命异常

...
private boolean isCRRegistered = false;

public int onStartCommand (Intent intent, int flags, int startId) {

     if(!isCRRegistered)    {
     IntentFilter filter2 = new IntentFilter("android.intent.action.PHONE_STATE");
     CallReceiver mCallReceiver = new CallReceiver();
     registerReceiver(mCallReceiver, filter2);

     //registering some listener
     mCallReceiver.registerListener(this);
     }
}
注销:

if(isCRRegistered)  {
        unregisterReceiver (mCallReceiver);
}
日志:

02-04 14:41:50.286: E/AndroidRuntime(28328): FATAL EXCEPTION: main
02-04 14:41:50.286: E/AndroidRuntime(28328): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.PHONE_STATE flg=0x20000000 (has extras) } in com.kris.intellignetringer.CallReceiver@448162b8
02-04 14:41:50.286: E/AndroidRuntime(28328):    at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:934)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at android.os.Handler.handleCallback(Handler.java:587)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at android.os.Looper.loop(Looper.java:143)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at android.app.ActivityThread.main(ActivityThread.java:4914)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at java.lang.reflect.Method.invokeNative(Native Method)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at java.lang.reflect.Method.invoke(Method.java:521)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at dalvik.system.NativeStart.main(Native Method)
02-04 14:41:50.286: E/AndroidRuntime(28328): Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.kris.intellignetringer.ScreenReceiver@44816d60
02-04 14:41:50.286: E/AndroidRuntime(28328):    at android.app.ActivityThread$PackageInfo.forgetReceiverDispatcher(ActivityThread.java:812)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:822)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:331)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at com.kris.intellignetringer.StateChecker.serviceDestroy(StateChecker.java:126)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at com.kris.intellignetringer.StateChecker.onPhoneStateChange(StateChecker.java:36)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at com.kris.intellignetringer.CallReceiver.onReceive(CallReceiver.java:50)
02-04 14:41:50.286: E/AndroidRuntime(28328):    at  android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:917)
02-04 14:41:50.286: E/AndroidRuntime(28328):    ... 9 more

错误不在这里!错误发生在您注销接收器时。似乎您正在有条件地注册接收者

因此,在取消注册接收者之前,请确保您确实注册了接收者


您可以使用注册接收器后设置的布尔值。然后,当您要注销接收器时,请确保布尔值设置为其他值(如果不是(false)),您不会注销。

错误不在这里!错误发生在您注销接收器时。似乎您正在有条件地注册接收者

因此,在取消注册接收者之前,请确保您确实注册了接收者


您可以使用注册接收器后设置的布尔值。然后,当您要注销接收器时,请确保布尔值设置为其他值(如果不是(false)),您不会注销。

我对您上一个问题的回答捕获了您尝试注销时的
IllegalArgumentException
。我对您上一个问题的回答在您尝试注销时捕捉到了
IllegalArgumentException
。根据您的建议,我已更新了代码,但同样的问题仍然存在。@soulleaver您确定这是您唯一调用
unregisterReceiver
的地方吗!?根据您的建议,我已更新了代码,但仍然存在相同的问题。@SoulLeaver您确定这是唯一一个调用
unregisterReceiver
的地方吗!?