0

我有一個運行所有時間來捕捉事件的BroadcastReceiver(#1)。事件發生時,可能需要對特定活動(如果該活動處於活動狀態)進行UI更改。要做到這一點,我有BroadcastReceiver#1創建一個新的意圖,由活動中的第二個BroadcastReceiver(#2)捕獲,並且僅在Activity未暫停時註冊/註銷......如下所述: Inform Activity from a BroadcastReceiver ONLY if it is in the foreground只有當活動不活躍時,才能從BroadcastReceiver postNotification

所有這一切工作。不過,現在我要廣播接收器#1張貼狀態通知時,活動是不是在焦點或在它的重點,但選擇不處理該事件。因此,活動(如果活動)需要某種方式與BroadcastReceiver#1進行通信。

我以爲我會讓BroadcastReceiver#1產生一個線程,它會在X秒過後通知事件...這個線程將有一個THIRD broadcastreceiver#3,並且如果接收活動選擇處理該事件,它可以發送「不打擾通知」意圖,這將被BroadcastReceiver#3捕獲以中止通知。但是,這不起作用,因爲Android不允許一個BroadcastReceiver註冊另一個BroadcastReceiver。

回答

0

從來沒有使用它,但應該工作。 在發送廣播查詢之前,是否有廣播接收者準備好處理您的意圖。

PackageManager pm = context.getPackageManager(); 
List<ResolveInfo> mList = pm.queryBroadcastReceivers(intent, 0); 

if(mList.size() > 0){ 
//broadcast intent 
}else{ 
//post notification 
} 

編輯: 因爲這不通過activites註冊recievers工作,你可以跟蹤寄存器中,使用應用程序類註銷。 由於相同的應用程序和流程正在使用,可以使幫手functtion註冊和註銷,並保持註冊的計數,並決定是否發佈通知或廣播的意圖

+0

不幸的是這並沒有真正解決原來的問題,因爲即使活動處於活動狀態並準備好接收廣播並不意味着它會處理它。 在這種情況下,該活動是一個聊天窗口......如果您當前正在與該人聊天,則該活動將處理該活動。否則,如果聊天活動與另一個人打開,那麼我仍然需要一個狀態通知... – Stu

+0

實際上,我意識到因爲意圖過濾器只是一個字符串,我可以將通常的通用過濾器字符串與特定ID ...然後你的方法似乎是有效的。但是,在測試它時,似乎queryBroadcastReceivers僅返回在清單中靜態註冊的接收...並且不計算動態註冊的廣播接收器... – Stu

+0

另請參閱https://groups.google.com/forum /?fromgroups =#!topic/android-developers/x34PX5hYFws – Stu