-1

私の活動では、Broadcast Receiverの登録を解除しようとしています。私は単にこの行を登録解除するだけです。アンドロイドでのブロードキャストの登録をチェックする方法は?

unregisterReceiver(myBroadcastReceiver); 

しかし、問題は、私は私のonActvityResult

2に結果を取得する場合、私のBroadcastは2つの条件

1)一つ上の登録解除であるということである)onDestroy

しかし、問題は、いつということです私のはonActvityResultから登録解除し、ユーザーがActivityを閉じると私のonDestroyが呼び出され、アプリケーションがクラッシュします。

マイLogcat:java.lang.IllegalArgumentExceptionが::

に起因するレシーバない 登録: com[email protected]831c755 android.app.LoadedApkで.forgetReceiverDispatcher(LoadedApk.java:782)android.content.ContextImpl.unregisterReceiver com.coincide.ridetog.post_ride.PostRideActvity.onDestroy(PostRideActvity.java:300)ここで

は私onDestroy()

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

myBroadcastReceiverがnullではないかどうかはすでに確認しています。あなたがそれを使用する明白な(プログラマーのための)方法からあなたを止めているのは何ですか? – Selvin

+0

また、それはBroadcastReceiverの何かのミスのように思えます...あなたのアプリが "活動をしないでください"の場合に試しました – Selvin

答えて

2

は、あなたの活動の次のメソッドを追加し、それを呼び出している時あなたのonResumeとあなたのonActivityResultコールバックで。メソッドが呼び出されると、myBroadcastReceiverインスタンスがnullに設定されるため、新しいmyBroadcastReceiverインスタンスを作成するまで複数回実行されることはありません。

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

それはとても卵巣ですか... :) – Selvin

+0

ありがとう@AlexTa thats私のために働く。間違い私はそれがヌルになる放送を登録解除すると思っていることをやっている。あなたの答えはそれを行う正しい方法です。あなたのような多くの人々がこのStackoverflow非常に有用なように多くのおかげです –

+0

あなたはようこそ@Shubhankグプタ – AlexTa

関連する問題