註冊廣播接收機意圖行動android.intent.action.BOOT_COMPLETED
,它將啓動與您預定的AlarmManager相同的任務(以前確保它沒有適時由AlarmManager觸發)。
編輯: 用於跟蹤嘗試某事像那(它只是一個提示 - 處理確切時間大約爲9安全地在自己的;)
public class KeepTrackReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences p = context.getSharedPreferences(
TrackedAlarmService.FILE_ALARM_TRACK, Context.MODE_PRIVATE);
long lastAlarm = p.getLong(TrackedAlarmService.KEY_LAST_ALARM_MILLIS, -1L);
if(lastAlarm == -1L || lastAlarm < TrackedAlarmService.getClosest9AM(false)) {
context.startService(TrackedAlarmService.createIntent(context));
}
}
}
public class TrackedAlarmService extends IntentService {
public static final String FILE_ALARM_TRACK = "alarmTrack";
public static final String KEY_LAST_ALARM_MILLIS = "lastAlarmMillis";
public static void schedule(Context context) {
AlarmManager am = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getService(context, 0,
createIntent(context), PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, getClosest9AM(true),
AlarmManager.INTERVAL_DAY, pi);
}
public static long getClosest9AM(boolean futurePastFlag) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
if(futurePastFlag) {
if(c.get(Calendar.HOUR_OF_DAY) > 9) {
c.roll(Calendar.DATE, true);
}
}
else {
if(c.get(Calendar.HOUR_OF_DAY) < 9) {
c.roll(Calendar.DATE, false);
}
}
c.set(Calendar.HOUR_OF_DAY, 9);
c.set(Calendar.MINUTE, 0);
return c.getTimeInMillis();
}
public static Intent createIntent(Context context) {
return new Intent(context, TrackedAlarmService.class);
}
public TrackedAlarmService() {
super("TrackedAlarmService");
}
@Override
protected void onHandleIntent(Intent intent) {
//save last alarm time
getSharedPreferences(FILE_ALARM_TRACK, MODE_PRIVATE)
.edit()
.putLong(KEY_LAST_ALARM_MILLIS, System.currentTimeMillis())
.commit();
// Do your repeating job....
}
}
謝謝。我的問題實際上是*如何*確保任務尚未被解僱。很明顯,我需要在這裏爲'BOOT_COMPLETED'提供廣播接收器。 – caw 2012-07-06 22:27:44
只是跟蹤它,我認爲它更明顯;) – 2012-07-06 22:32:12