警报管理器的引用说明是这样的
If the stated trigger time is in the past, the alarm will be triggered immediately.
我在我的应用程序中遇到了这个问题。这是我的警报管理器代码:
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
应该做什么?
最佳答案
您不需要创建时间戳
。您可以使用日历
来完成此操作。
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会阻止立即触发闹钟服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61167503/