android - 调用 onDestroy 函数时 Receiver not registered 错误

标签 android broadcastreceiver

当我创建扩展 BrodcastReceiver 的类并注册它时。 错误 Unable to destroy activity, Receiver not registered: null onDestroy()函数在MainActivity时调用unregisterReceiver。

onCreate():

ConnectionChangeReceiver connectionChangeReceiver = new ConnectionChangeReceiver();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectionChangeReceiver, filter);

onDestroy():

@Override
protected void onDestroy() {
    Log.v("YourActivity", "onDestroy");
    unregisterReceiver(connectionChangeReceiver);
    super.onDestroy();
}

ConnectionChangeReceiver 类:

public class ConnectionChangeReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive( Context context, Intent intent )
    {
        Toast.makeText(context, "CONN", Toast.LENGTH_SHORT).show();
    }
}

list :UPDATE:添加后<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mamrezo.mapapp" >

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >


    <activity
        android:name="com.example.mamrezo.mapapp.MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name=".ConnectionChangeReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

</application>

</manifest>

最佳答案

我总是在onStart注册 接收器并在onStop取消注册。由于这个答案,我知道了这一点:https://stackoverflow.com/a/24391706/1203797

如果它在您的情况下仍然不起作用,只需 wrapunregisterReceiver(connectionChangeReceiver); 一个 try-catch block 就是答案,如我发布的链接中所述以上。

或者你可以在manifest中注册它,例如:

    <receiver android:name=".ConnectionChangeReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

关于android - 调用 onDestroy 函数时 Receiver not registered 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27329862/

相关文章:

java - Android - 多次调用 DownloadManager/BroadcastReceiver

java - 致命异常 : android. app.RemoteServiceException : can't deliver broadcast at android. os.Handler.dispatchMessage

java - 为什么我的 PreferenceScreen 会强制关闭?

android - 是否可以阻止我的应用程序显示电池耗尽通知?

android - 滚动列表时 RecyclerView.getChild(index) 显示 null(索引变得困惑)

android - 从 Activity 开始和停止 broadcastReceiver

android.net.conn.CONNECTIVITY_CHANGE 问题

java - 在Android BroadcastReceiver中使用Jsoup时如何解决 "UnsatisfiedLinkError"?

java - 从 android 将媒体上传到 S3 存储桶时出错

java - 按下抽屉导航项目时应用程序崩溃