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