如果一天的报警时间已经过去,android会阻止立即触发报警服务



报警管理器的参考说明

如果规定的触发时间在过去,则会触发报警立即

我在申请中遇到了这个问题。这是我的警报管理器代码:

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
                {
                }

如果setTimestampcurrentTimestamp之前,我应该将alarmManager设置为什么?

您不需要创建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*()方法。

相关内容

  • 没有找到相关文章

最新更新