如何取消注册在Manifest

时间:2016-05-06 09:59:08

标签: android broadcastreceiver

我的应用程序需要接收器广播并只做一次。 这个场合可能是我的应用还没有开始的时间,所以我在Manifest声明了接收器:

<receiver
    android:name=".OneShotBroadcast"
    android:permission="com.ytinrete.broadcast.accesspermisson">
    <intent-filter>
        <action android:name="com.ytinrete.broadcast.oneshot"/>
    </intent-filter>
</receiver>

这里有接收:

@Override
public void onReceive(Context context, Intent intent) {

    //want to doing my work here just once
    ......

}

问题出现了:当我第一次接收广播时,我找不到任何方法来取消注册这个接收器。

我试过这个:

context.unregisterReceiver(this);

但它引发了例外:

java.lang.RuntimeException: Unable to start receiver com.ytinrete.OneShotBroadcast: 
java.lang.IllegalArgumentException: Receiver not registered: com.ytinrete.OneShotBroadcast@5354a224

目前我只是在接收器中设置一个静态布尔值作为标志并且它可以工作,但我倾向于找到一种取消注册的方法,这样我就不需要在我的项目中维护这样的魔术变量。

还有另一种解决方法吗? 任何线索将不胜感激!

感谢Truong Phu Quoc 真的有一种取消注册的方法: Android - how to unregister a receiver created in the manifest 我已经对它进行了测试,但它确实有效。

2 个答案:

答案 0 :(得分:0)

我认为你需要LocalBroadcastManager的实例取消注册

你应该尝试更换

context.unregisterReceiver(this);

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

希望有所帮助

答案 1 :(得分:0)

我不这么认为,但是如果你想接收者,那么只在你的活动中注册。并在onDestroy方法中取消注册。 如果你声明它是清单文件,那么每次调用你的广播时都会调用它。 当你不想要它时,你什么都不能做。

喜欢

if(not_required){
      return ;
} else{
\\do some with action.
}

希望它有所帮助。