我有一個應用程序在應用程序在後臺時每隔10分鐘由一個報警觸發的服務中執行某些操作。即使操作系統殺死了應用程序(所以它已經死了,必須重新啓動),並且只有當用戶從最近的應用程序中刪除應用程序或強制從設置中殺死應用程序(或者註銷但是已經工作)。我嘗試了很多不同的方法,最近我沒有任何運氣嘗試這個http://www.dotkam.com/2011/01/10/android-prefer-alarms-and-intent-receivers-to-services/。我的鬧鐘看起來像這樣。只希望當從最近的應用程序中刪除或用戶被迫中止時報警死亡
if(ActivityLifecycleHandler.isApplicationInForeground()) {
return; // If App is in foreground do not start alarm!
}
String alarm = Context.ALARM_SERVICE;
AlarmManager am = (AlarmManager) context.getSystemService(alarm);
Intent intent = new Intent(locationBroadcastAction);
PendingIntent pi = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, 0);
int type = AlarmManager.ELAPSED_REALTIME_WAKEUP;
// Set trigger time to 0, because want to fire off the first one instantly
am.setRepeating(type, 0, ONE_MINUTE, pi);
而且廣播接收器:
public class LocationBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent myIntent = new Intent(context, LocationService.class);
context.startService(myIntent);
}
}
什麼我做錯了任何想法?一切工作正常,直到OS殺死應用程序。
Aaah,太棒了!是的,我實際上認爲這也是鬧鐘的全部,但我無法讓它正常工作,所以我懷疑。我會試試看,看看它是否有效。無論如何感謝這些信息。順便說一句,用戶會注意到,自從它醒來後,該服務以任何方式運行了大約5秒鐘? – Slagathor
啊,報警實際上沒有顯示在應用程序死亡後轉儲.. – Slagathor
這很奇怪,我試過你的代碼在API 21,它似乎工作。即使應用程序已被殺死並且屏幕關閉:該進程已創建,並且接收方會收到警報。唯一可能不同的是Receiver是靜態註冊的(否則系統不知道如何重新創建它),但它不能解釋爲什麼警報從列表中消失。 – bwt