如果当天的闹钟时间已经过去,android会阻止立即触发闹钟服务
Posted
技术标签:
【中文标题】如果当天的闹钟时间已经过去,android会阻止立即触发闹钟服务【英文标题】:android prevent immediate trigger of alarm service if alarm time has passed for the day 【发布时间】:2016-04-10 21:08:28 【问题描述】:警报管理器的参考资料说
如果规定的触发时间是过去的,就会触发警报 马上。
我在我的应用程序中遇到了这个问题。这是我的警报管理器代码:
Intent myIntent = new Intent(getActivity(), DinnerAlarmReceiver.class);
pendingDinnerIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingDinnerIntent);
这个问题有解决办法吗?
-----编辑------
我编写了一些代码来估计闹钟的设置时间是否在当前时间之前。这是上面的部分有相应的变化:
Calendar calendar = Calendar.getInstance();
long currentTime = calendar.getTimeInMillis();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
long setTime = calendar.getTimeInMillis();
Timestamp setTimestamp = new Timestamp(setTime);
Timestamp currentTimestamp = new Timestamp(currentTime);
if (setTimestamp.after(currentTimestamp))
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingDinnerIntent);
else
如果setTimestamp
在currentTimestamp
之前,我应该alarmManager
做什么?
【问题讨论】:
【参考方案1】:您无需创建Timestamp
s。你可以用你的Calendar
来做。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
if(calendar.before(Calendar.getInstance()))
calendar.add(Calendar.DATE, 1);
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingDinnerIntent);
我还要提到,从 KitKat 开始,如果您的 targetSdkVersion
为 19 或以上,则 AlarmManager#set()
方法不准确。如果您希望闹钟在准确的时间触发,则需要使用setExact*()
方法。
【讨论】:
以上是关于如果当天的闹钟时间已经过去,android会阻止立即触发闹钟服务的主要内容,如果未能解决你的问题,请参考以下文章