2013-11-28 96 views
4

我有一個android應用程序,我安排將要使用鬧鐘管理器在將來執行的事件(位置更新)。只要應用程序在前臺或後臺運行,預定的事件就會按預期執行。但是,一旦我強制關閉任務管理器下的應用程序,或者當Android應用程序處於後臺時由於內存問題而終止應用程序時,我不再能夠從警報管理器接收廣播。安卓廣播接收器沒有在應用程序關閉時執行

如所建議的通過各種文章和網我使用 1)Intent.Flag_Include_Stopped_Packages 2)接收機機器人嘗試:過程=「:遠程」清單中 3)接收機機器人:導出=「真」,在清單

在服務:

Intent locationIntent = new Intent("com.dummy.intent"); 
locationIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
locationIntent.putExtra(LocationLibraryConstants.LOCATION_BROADCAST_EXTRA_LOCATIONINFO, locationInfo); 
context.sendBroadcast(locationIntent, "android.permission.ACCESS_FINE_LOCATION"); 

在清單:

<receiver android:name=".NearestStationBroadcastReceiver" android:enabled="true" 
    android:exported="true" 
    android:process=":remote"> 
    <intent-filter> 
     <action android:name="com.dummy.intent" /> 
    </intent-filter> 
</receiver> 

可發omeone請幫我一下嗎?

回答

3

但是,一旦我強制關閉任務管理器下的應用程序,或者當android系統由於內存問題殺死應用程序時,當應用程序處於後臺時,我不再能夠從鬧鐘管理器接收廣播。

這些與對方無關,所以如果你一直在模擬「當android系統由於內存問題殺死應用程序」時,使用強制停止,那是你的問題。通過設置強制停止的應用程序除去了其他事件中的警報。模擬正在終止的進程的更好方法是從DDMS終止它。

1)Intent.Flag_Include_Stopped_Packages 2)接收機機器人:過程= 「:遠程」 清單中的3)接收機機器人:在那些清單

無出口= 「真」 相關的問題了和android:exported="true"(以及您對<intent-filter>的使用)會引發安全問題,因爲任何人都可以因任何原因隨時運行您的BroadcastReceiver

Here is a sample application成功處理警報事件,即使進程已被DDMS終止後。

+0

感謝您的回答。 – user3047032

+0

但我沒有在模擬器上模擬這種情況。我在實際設備上安裝應用程序。在我開啓了幾個應用程序之後,當我開啓幾個其他應用程序後,開始收聽位置警報以及應用程序移至非活動狀態(通過打開其他應用程序)時,android系統會停止我的位置應用程序。然後在報警間隔服務重新啓動併發送位置更新信息的意圖。但是在應用清單中定義的廣播接收器不會觸發。當應用程序在後臺可用時,上述功能完美無缺。希望你明白我的觀點。 – user3047032

0

您必須在手機上的Android設置>保護的應用程序部分添加您的應用程序。這讓用戶可以控制哪些應用程序允許在後臺運行。

如果您獲得必要的權限,您也可以編寫服務來偵聽將在後臺運行的位置廣播,而不會出現問題。

相關問題