2

我已經安排了鬧鐘,每天早上10點觸發。如何在鬧鈴時間過去時避免觸發鬧鈴?

我在上午12點週一設置此報警。

如果報警時間過去那麼,報警將被立即觸發。

但對於我的要求,我不希望立即觸發。上午10點在第二天觸發我很好。

下面是我當前的代碼來設置報警:

Calendar activeModeTime = Calendar.getInstance(); 
    // activeModeTime.setTimeZone(TimeZone.getTimeZone(Constants.TIME_ZONE)); 
    activeModeTime.set(Calendar.HOUR_OF_DAY, 
      mSharedPrefManager.getActiveStartHourPref()); 
    activeModeTime.set(Calendar.MINUTE, 
      Constants.DEFAULT_ACTIVE_START_MINUTE); 
    activeModeTime.set(Calendar.SECOND, 
      Constants.ALL_START_END_DEFAULT_SECOND); 

    mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
      activeModeTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, 
      getActiveModeAlarmPendingIntent()); 

我怎麼做到這一點。

+0

設置它後的第二天。 – 2015-04-06 10:42:59

+0

我可以設置週二..但下週星期一我需要這個警報吶...如何做到這一點? – 2015-04-06 10:44:33

+0

只需設置下一個日期。 – 2015-04-06 10:47:49

回答

5

檢查您所設置的時間是在過去,如果再加入24個小時到您的觸發時間。

if(activeModeTime < System.currentTimeMillis()){ 
    activeModeTime += AlarmManager.INTERVAL_DAY; 
} 
+0

是否有參數可供設置爲過去不觸發。 – 2015-04-06 11:40:32

+0

不在'AlarmManager'中重載'setRepeating()'方法,所以沒有我們可以傳遞給這個atm的參數。 – trpride 2015-04-06 12:27:28

+0

而且還有API 19及以上的警報是不精確的。我正在測試設備4.4.4。我預定了上午10點的鬧鐘。現在時間是上午10點15分。警報仍然沒有被觸發。有沒有特定的延遲時間? – 2015-04-07 05:10:28

0

寫入時間間隔而不是REPEATING_INTERVAL。 對於上午10點的上例,您需要在下面的代碼中寫入AlarmManager.INTERVAL_DAY而不是REPEATING_INTERVAL。

if(Calendar.getInstance().getTimeInMillis()>=calendar.getTimeInMillis()){ 
    timeInMillis = calendar.getTimeInMillis() + REPEATING_INTERVAL; 
}else { 
    timeInMillis = calendar.getTimeInMillis(); 
} 

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMillis,REPEATING_INTERVAL, pendingIntent); 
+0

請編輯您的文章並向您的代碼添加一些解釋。 – juzraai 2017-09-19 19:56:07

+0

好了@juzraai完成! – 2017-12-14 04:56:15