android - 从接收者自己的 onReceive() 方法中注销 'dynamic' BroadcastReceiver 是否可以?

标签 android android-intent android-broadcast

也就是说,我有这个动态创建的 BroadcastReceiver 来收听一个广播,之后我希望它自行取消注册。

我还没有找到任何以这种方式执行此操作的示例代码,但我也没有在 android 在线文档中找到任何禁止这样做的规则。但是我不能让它在 Activity 中停留那么久,而且它无论如何都在一个匿名类中,所以包含类甚至不知道变量名。

也就是说,代码看起来像这样:

myInfoReceiver = new BroadcastReceiver() {
onReceive(Context ctx, Intent intt) {
    // do some Notification when I get here
    nm.notify("I got here") // obvious pseudo code
    ctx.unregisterReceiver(myInfoReceiver);
} // end onReceive
ctx.registerReceiver),uInfoReceiver, new IntentFilter(...));
}; // end BroadcastReceiver

但是当我运行它时,Android 在调用取消注册时会提示,坚持认为接收器不在那里取消注册(我忘记了确切的措辞,但它抛出了 IllegalArgumentException)。

我还尝试修改代码以检查“intt”中的操作是否与预期的相同——但它仍然执行 onReceive 但默默地无法注销。

最佳答案

您的问题的答案是"is"。然而……

...您需要在调用 registerReceiver() 的同一 Context 上调用 unregisterReceiver()。在您发布的代码中,您在作为参数传递给 onReceive()Context 上调用 unregisterReceiver()。这与 Context 不同,这就是您获得异常的原因。

关于android - 从接收者自己的 onReceive() 方法中注销 'dynamic' BroadcastReceiver 是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30783282/

相关文章:

android - 通过 bundle 传递值并在另一个 Activity 中获取它的值

android - 如何从 "extends Application"类创建 Intent ,上下文为空

android - 在android中卸载应用程序时调用广播接收器

java - Android 按钮返回 null

java - 创建新文件时的奇怪问题

Java.lang.IllegalStateException : The application PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged android 错误

android - 添加隐式广播异常?

java - 贪吃蛇游戏中的 die() 方法用于有毒食物

android - xxhdpi的图像比例是多少?

android - 将 SMS 从 BroadcastReceiver 传递到 Activity