gpt4 book ai didi

android - 无法在 Android 中注销 BroadcastReceiver

转载 作者:行者123 更新时间:2023-11-30 03:04:11 26 4
gpt4 key购买 nike

我已经看过 How to unregister BroadcastReceiver但这并没有解决我的问题。

在 Android 应用程序上,我在 onResume() 方法中注册了一个 BroadCastReceiver,我想在 onPause() 方法中注销它

@Override
protected void onResume() {
super.onResume();

// TODO:
// Register the BroadcastReceiver to receive a
// DATA_REFRESHED_ACTION broadcast
log("RefreshReceiver registrao");
registerReceiver(mRefreshReceiver, new IntentFilter(DATA_REFRESHED_ACTION));
}

@Override
protected void onPause() {
// TODO:
// Unregister the BroadcastReceiver
unregisterReceiver(mRefreshReceiver); //fails here
Log.i("QUE PASA PEñAAA","desregitro el receptor");
super.onPause();
}

logcat 消息表明它无法注销该方法。顺便说一句:

public static final String DATA_REFRESHED_ACTION = "course.labs.notificationslab.DATA_REFRESHED";

感谢一切

最佳答案

您的代码看起来不错,但您应该将 super.onPause(); 移动到 onPause 的顶部 - 我不确定这是否是您出现问题的原因。

假设您没有在其他地方取消注册接收者,您可以保留一些标志,无论您的接收者是否已经注册,请按照此 SO 中的说明进行操作:Correct pattern for registering a receiver?

您还应该切换到更适合本地应用程序广播的 LocalBroadcastManager:http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html#ownreceiver_localbroadcastmanager


[编辑]

来自你的 logcat:

java.lang.IllegalArgumentException: Receiver not registered: null

看起来你还没有初始化mRefreshReceiver而且它是空的,你应该调用:

mRefreshReceiver = new RefreshReceiver();

在调用 register 之前,或者如果您有这样的代码,请确保您没有在某处将 null 分配给 mRefreshReceiver。

关于android - 无法在 Android 中注销 BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22090923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com