2014-12-06 37 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