Receiver not registered:
最近在使用Receiver的时候当unregisterReceiver的时候就会报Receiver not registered异常,后来仔细检查之后,终于知道原因了。通常出现这个问题:
第一种:是你的Receiver真的没有注册.
第二种:是你的conext.unregisterReceiver和conext.registerReceiver的context不相等,你可以在注册之后,调用unregisterReceiver排除下,一般使用getApplicationContext就没问题了,
第三种:是个人犯得低级错误,我的原因是context.registerReceiver(new ReceiveBroadCast(), myIntentFilter);
context.unregisterReceiver(new ReceiveBroadCast());因为new了两次所以导致ReceiveBroadCast两次不相同!
private boolean mReceiverTag = false; //广播接受者标识
//代码中动态注册广播
private void registerReceiver() {
if (!mReceiverTag){ //在注册广播接受者的时候 判断是否已被注册,避免重复多次注册广播
IntentFilter mFileter = new IntentFilter();
mReceiverTag = true; //标识值 赋值为 true 表示广播已被注册
mFileter.addAction("com.android.scan.RECEIVED_CODE_FROM_NFC");
this.registerReceiver(mReceiver, mFileter);
}
}
//注销广播
private void unregisterReceiver() {
if (mReceiverTag) { //判断广播是否注册
mReceiverTag = false; //Tag值 赋值为false 表示该广播已被注销
this.unregisterReceiver(mReceiver); //注销广播
}
}
代码中动态注册广播,记得在界面关闭的时候注销广播.不然会有多个广播接受者存在.记得代码中
registerReceiver 和 unregisterReceiver 成对存在.