-1

在我的活動中,我嘗試註銷Broadcast Receiver。我只是把這條線取消註冊。如何檢查廣​​播註銷或不在android?

unregisterReceiver(myBroadcastReceiver); 

但問題是,我的Broadcast是註銷兩個條件

1)一個,如果我得到的結果在我的onActvityResult

2)onDestroy

但問題是,當我的Broadcast ReceiveronActvityResult取消註冊,當用戶嘗試關閉Activity時,我的onDestroy被調用,我的應用程序崩潰。

我的logcat:

造成的:java.lang.IllegalArgumentException異常:接收器不 註冊: com[email protected]831c755 在android.app.LoadedApk .forgetReceiverDispatcher(LoadedApk.java:782) 在android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1205) 在 android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:586) 在 com.coincide.ridetog.post_ride.PostRideActvity.onDestroy(PostRideActvity.java:300)

這是我onDestroy()

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (myBroadcastReceiver!=null) { 
     unregisterReceiver(myBroadcastReceiver); 
    } 
} 
+0

您已檢查myBroadcastReceiver是否爲空。什麼阻止你從明顯的(程序員)使用它的方式? – Selvin

+0

此外,它似乎像某種錯誤的BroadcastReceiver ...你試過,如果你的應用程序的作品,如果「不要保持活動」在 – Selvin

回答

2

添加下面的方法在您的活動,並呼籲它在你的onResume和你的onActivityResult回調。一旦方法被調用,它會將你的myBroadcastReceiver實例設置爲空,所以它將避免多次執行,直到你創建一個新的myBroadcastReceiver實例。

private void unregisterMyBroadcastReceiver() { 
    if (null != myBroadcastReceiver) { 
     unregisterReceiver(myBroadcastReceiver); 
     myBroadcastReceiver = null; 
    } 
} 
+0

它是如此ovbious ... :) – Selvin

+0

謝謝@AlexTa這對我的工作。我正在這樣做的錯誤,我想當我註銷廣播時它變爲空。但你的答案是做到這一點的正確方法。非常感謝像你這樣的人使這個Stackoverflow非常有幫助 –

+0

不客氣@Shubhank Gupta – AlexTa