2014-12-06 42 views
4

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

的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(); 
    } 
} 

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

后0
<?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> 
+0

确定的接收器被注册?你的AndroidManifest.xml中是否有正确的设置? – Squonk 2014-12-06 08:57:12

+0

看看这个[链接](http://stackoverflow.com/questions/6165070/receiver-not-registered-exception-error)。你是否在其他地方取消注册,是否有可能再次取消注册? 你是否暂停(并且你在onPause()中注销了代码),然后再次启动,并且你忘记将该寄存器放入onResume()中? – SummerCode 2014-12-06 08:44:54

+0

@Squonk <用途的许可机器人:名称= “android.permission.INTERNET对”/> <使用的许可机器人:名称= “android.permission.ACCESS_NETWORK_STATE”/> – mamrezo 2014-12-06 09:01:21

回答

1

我总是register接收机在onStartunregister它在onStop。我知道这多亏了这样的回答:https://stackoverflow.com/a/24391706/1203797

如果它仍然没有你的情况下工作,只需换一个unregisterReceiver(connectionChangeReceiver);try-catch将是答案,正如我上面贴的链接说明。

或者你可以在manifest,例如对其进行注册:

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

你可以在清单注册:我做但仍然不工作 – mamrezo 2014-12-06 09:02:22

+0

我添加了注册'onStart'并取消注册'onStop'但仍然不能正常工作 – mamrezo 2014-12-06 09:03:51

+0

@mamrezo当你在'manifest'注册时有任何错误信息 – 2014-12-06 09:06:53