2014-02-21 41 views
1

我想AlarmManager重複在預定時間的任務(每週)爲什麼我的AlarmManager會立即觸發?

我用下面的代碼:

for (Integer day : daysList) { 
    Calendar c = Calendar.getInstance(); 
    c.set(Calendar.DAY_OF_WEEK, PersonalUtils.getDigitalWeek(day)); 
    c.set(Calendar.HOUR_OF_DAY, task.getHour()); 
    c.set(Calendar.MINUTE, task.getMinute()); 
    c.set(Calendar.SECOND, 0); 
    c.set(Calendar.MILLISECOND, 0); 
    intent.putExtra("id", task.getId()); 
    PendingIntent operation = PendingIntent.getService(
       getApplicationContext(), requestCode, intent, 0); 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY * 7, operation); 
} 

然而,報警吧過早觸發。

例如:假設現在是星期三18:30。我設置了一個應該在下週17:30週二觸發的任務,但是立即觸發警報

有人可以告訴我爲什麼嗎?

+0

你可以檢查c.getTime()後設置的一切,我認爲有一些失算。您可能需要先在日曆上設置下週的Time(),然後再使用。 – Prakash

+1

如果您設置了已經通過的日期,警報將立即觸發。 – Endzeit

回答

1

您正在嘗試做一個不精確的警報,它只允許一些特定的常量,INTERVAL_DAY, INTERVAL_FIFTEEN_MINUTES等。有關更多信息,請參閱Android Docs。那些常量只能用於InexactRepeatingAlarms,但我看到你在做一個RepeatingAlarm。

您有幾個選擇,您可以將鬧鐘設置爲在一週內觸發,也可以將其設置爲每天不精確觸發,並且只有在第7天發生鬧鐘時纔會注意。爲了準確地觸發從現在起,每7天,試試這個:

final long WEEK_IN_MILLIS= 604800000; 
alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis()+WEEK_IN_MILLIS, 
      WEEK_IN_MILLIS, operation); 

注意,我將其設置爲第一個觸發器在1周,再以後每週重複。這應該適合你。

相關問題