如何避免超过闹钟时间触发闹钟?
Posted
技术标签:
【中文标题】如何避免超过闹钟时间触发闹钟?【英文标题】:How to avoid the alarm triggering when the alarm time is past? 【发布时间】:2015-06-10 18:09:05 【问题描述】:我已安排在每天上午 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());
我如何做到这一点。
【问题讨论】:
设置为后天。 我可以设置为星期二.. 但是下周星期一我需要这个闹钟 na... 怎么做? 只需设置下一个日期。 【参考方案1】:检查您设置的时间是否为过去,如果是,则将触发时间增加 24 小时。
if(activeModeTime < System.currentTimeMillis())
activeModeTime += AlarmManager.INTERVAL_DAY;
【讨论】:
是否有参数可以设置为过去时间不触发。 不,setRepeating()
方法在 AlarmManager
中没有重载,所以我们无法为这个 atm 传递参数。
而且 API 19 及更高版本的警报也不准确。我正在设备 4.4.4 中进行测试。我安排了上午 10 点的闹钟。现在时间是上午 10.15 点。仍然没有触发警报。有具体的延迟时间吗?
它应该在时间过去后立即触发,但是什么时候停止工作,因为在你提到的问题中“如果警报时间过去了,那么警报将立即触发。”。确保警报准确按时触发的一种方法是设置一次性警报,并在您处理警报传递时安排下一个警报。
我也不能设置一个时间闹钟。即使是一次性设置方法也与 api 19 不精确。【参考方案2】:
写入间隔而不是 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);
【讨论】:
请编辑您的帖子并为您的代码添加一些解释。以上是关于如何避免超过闹钟时间触发闹钟?的主要内容,如果未能解决你的问题,请参考以下文章