以下是问题的扩展示例。现在是凌晨1:30。警报定于今天晚些时候上午10点。我昨天将手机时间改为1159PM。警报管理器会在错误的时间立即触发。
如果时间过去,如何阻止AlarmManager响铃?
但是,如果我改变时间,没有任何反应。
我不希望我的应用程序发生这种情况,因为其他警报应用程序不会发生这种情况。有没有办法确保报警管理器只在设置的确切时间响铃(如果没有跳过它)?
这是我的警报管理器代码。
Calendar alarmCal = closestAlarm.toCalendar();
Intent alarmIntent = new Intent(this, ActiveAlarmService.class);
alarmIntent.putExtra("alarm", closest);
pendingAlarm = PendingIntent.getService(AlarmService.this, 0, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmCal.getTimeInMillis(), pendingAlarm);
我尝试使用BroadcasetReceiver捕获时间/日期更改事件,但广播和AlarmManager之间的延迟太大,因为它是在过去设置的。
答案 0 :(得分:0)
我找到了解决方案。感觉奇怪,但它很坚固。
这是我最初使用的。
alarmManager.set(AlarmManager.RTC_WAKEUP,
alarmTimeCalendar.getTimeInMillis(), pendingAlarmIntent);
这是解决方案。
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimeCalendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingAlarmIntent);
您必须管理和取消此AlarmManager,就好像它是第一种方法一样。如果你忘记了,你的闹钟就会响起。