2
我需要我的服務每天晚上02:00執行任務,如果任務失敗,然後安排自己在30分鐘後重新開始,但是如果成功,然後自行停止,並在另一晚02 :00。我設法在02:00開始,但在它被觸發後,它不斷地觸發它。AlarmManager一直重複觸發
我的代碼是在Service
,這裏是代碼本身:
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
//doTasks();
MediaPlayer player = MediaPlayer.create(this,
Settings.System.DEFAULT_NOTIFICATION_URI);
player.start();
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);
}
doTasks()
是我需要運行的任務,而是因爲他們是緩慢的我用於測試目的的通知聲音。而pendingIntent是這個Service
本身。
任何想法是什麼讓我的AlarmManager
不斷觸發?
那麼如果你的'pendingIntent'設置爲啓動'Service',那麼基本上你每次都在'onStart(...)'方法中創建一個警報。在別的地方創建鬧鐘(例如在一個'Activity'或者一個擴展了'Application'的類中)。 – Squonk
但它不應該只在02:00觸發,無論它在哪裏創建? –
是的,沒有。 'AlarmManager'有一個機制,如果設備在應該觸發時睡着了,它會觸發一個「延遲」警報。在你的情況下,因爲你經常重新創建鬧鐘,所以'AlarmManager'不斷認爲它應該立即被觸發,即使時間已過02:00:00 – Squonk