2012-12-11 141 views
0

在我的應用程序中,我希望每隔幾分鐘執行一次任務,爲此我添加了一個報警管理器,以在經過的時間運行。代碼很簡單:android:報警任務在應用程序關閉時關閉

AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(this, OnAlarmReceiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0); 

    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      SystemClock.elapsedRealtime() + 1000 /* Initial run in 1 second */, 
      OnBootReceiver.REPEAT_PERIOD, /* 10 minutes */ 
      pi); 
當然

我有廣播接收器:

public class OnBootReceiver extends BroadcastReceiver { 
    //implementation here 
} 

我跑在我的應用程序廣播(OnBootReceiver),並在主要活動這個代碼,以確保我的代碼運行在應用程序啓動和每次啓動時。

我的問題是當操作系統關閉bg應用程序。如果我去任務管理器並運行清除內存命令,我的應用程序將關閉,並且不會收到任何警報通知。

在這種情況下,我如何在我的代碼中繼續接收報警通知?

回答

2

如果我去任務管理器,並運行清除內存命令,我的應用程序關閉,我沒有得到任何警報通知。

由於標準Android中不存在「清除內存命令」,因此只有設備製造商才能知道此功能的準確實現。

在這種情況下,我如何在我的代碼中繼續接收報警通知?

也許你沒有。最有可能的是,設備製造商正在執行Force Stop在「設置」中執行的一些操作,包括未更改警報。您可以在「運行清除內存命令」之前和之後運行adb shell dumpsys alarm來確認此理論,以查看警報發生了什麼變化。

請注意,即使在缺少「清除內存命令」的設備上,用戶也可以強制停止您的設置,並取消警報。

+0

用戶有停止使用應用程序的方法(關閉按鈕),我需要的是確保只有用戶可以關閉應用程序而不關閉操作系統。 –

+0

@ZelterAdy:你可以建立自己的移動操作系統。或者,您可以下載Android源代碼,從設置中刪除強制停止按鈕,重建該源代碼,將其轉換爲ROM模塊,然後在任何可以使用的設備上安裝該ROM模塊。否則,用戶可以對其設備進行最終控制,包括設備製造商提供的強制停止和任何等價物。 – CommonsWare

0

試試這個:

爲您的活動,清單中的XML,放:

android:persistent="true" 

編輯:

請訪問以下鏈接:https://groups.google.com/forum/#!topic/android-platform/nU0e3aoBlSYhttp://developer.android.com/reference/android/app/Service.html#startForeground%28int,%20android.app.Notification%29

+0

不起作用。 沒有幫助。 –

+0

請看我編輯的答案。 – Shrikant

+0

謝謝 - 如果我有服務,這些鏈接會有所幫助,但我不知道。我儘量避免使用服務,我使用警報接收器實現了我的應用程序,然後在將其更改爲服務之前,我想嘗試找到一種方法將其修復到實際的表單中。 –