也就是說,我有一個廣播接收機,用於在一個廣播中收聽廣播,之後我希望它自己取消註冊。可以從接收者自己的onReceive()方法註銷'dynamic'BroadcastReceiver嗎?
我還沒有找到任何這樣做的示例代碼,但是我沒有在android在線文檔中發現任何禁止此操作的規則。但是我不能讓它像活動一樣長時間滯留,而且它仍然處於匿名類中,所以包含類甚至不知道變量名。
也就是說,代碼看起來是這樣的:
myInfoReceiver = new BroadcastReceiver() {
onReceive(Context ctx, Intent intt) {
// do some Notification when I get here
nm.notify("I got here") // obvious pseudo code
ctx.unregisterReceiver(myInfoReceiver);
} // end onReceive
ctx.registerReceiver),uInfoReceiver, new IntentFilter(...));
}; // end BroadcastReceiver
但是當我運行這一點,Android的時,它調用註銷,堅持接收機是不是有註銷(我忘了確切的措辭抱怨,但它拋出IllegalArgumentException)。
我也嘗試修改代碼來檢查'intt'中的動作是否與預期相同 - 但是它仍然執行onReceive,但是默默無法取消註冊。
什麼你的目標是什麼想要實現?我想,'BroadcastReceiver'可能是您的問題的錯誤選擇。如果您想要執行一次操作並且想要使其與活動生命週期無關,請考慮在事件總線(例如Otto)中使用「IntentService」或「Service」。 –
我不會使用IntentService等,因爲這是一部分的較大的系統已經有一個廣播意圖,恰好代表我想要的信息。另外,我不需要生命週期中的那麼多獨立性。我已經在UI線程中等待這個意圖,什麼都不做,只是顯示一個進度對話框。 –