2011-04-25 111 views
4

問候!我正在開發一個應用程序,該應用程序具有一個監聽「android.intent.action.PHONE_STATE」的BroadcastReceiver,該應用程序在電話狀態發生變化時運行(我使用它在檢測到入局呼叫時運行代碼)。這在我的大多數測試手機上都能正常工作,但有一些似乎並未觸發接收器。但是,一旦這些問題手機重新啓動,一切都按預期工作。Android BroadcastReceiver安裝後不能正常工作

在BroadcaseReceiver可以提取任何東西之前,這些手機是否需要重新啓動?有沒有一種方法可以檢測它是否沒有運行並手動「啓動」BroadcaseReceiver?我很難過,所以我會很感激你能提供的任何幫助。

謝謝。

回答

3

在BroadcaseReceiver可以選擇任何東西之前需要重新啓動這些手機嗎?

假設您的應用有BroadcastReceiver在清單中註冊的PHONE_STATE廣播,應立即在安裝工作。如果沒有,它感覺像是一個錯誤的ROM給我。

有沒有一種方法可以檢測出它是否未運行並手動「啓動」BroadcaseReceiver?

不,主要是因爲它沒有運行,通常情況下,即使事情正在運行。 BroadcastReceiver的一個實例在Intent - <intent-filter>匹配點創建,它被調用onReceive(),並且BroadcastReceiver被丟棄,一旦onReceive()返回。

+0

謝謝,這是我怎麼想它工作,但與這些問題,我不知道。 – Mac 2011-04-25 15:25:11

16

爲了擴大這個問題:從Android 3.1開始,已安裝的應用程序將處於「已停止」狀態。要從已停止的應用程序調用BroadcastReceiver(s),需要額外的broadcast intent flag

更多細節:http://developer.android.com/sdk/android-3.1.html#launchcontrols

我在應用程序中創建FLAG_INCLUDE_STOPPED_PACKAGES常數(= 32)(預安卓3.1),只是將它添加到我的廣播意圖intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);

+1

這是每個人都在尋找的答案。如果有人不明白如何使用它:在您的GCM BroadCast Receiver中添加意圖FLAG_INCLUDE_STOPPED_PACKAGES,即使您的應用程序處於「已停止」狀態,您也應該能夠收到通知。 – superuserdo 2015-01-27 02:39:58