如果手动更改系统时间,如何停止Android AlarmManager?

时间:2016-03-11 05:34:50

标签: java android alarmmanager

以下是问题的扩展示例。现在是凌晨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之间的延迟太大,因为它是在过去设置的。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。感觉奇怪,但它很坚固。

这是我最初使用的。

alarmManager.set(AlarmManager.RTC_WAKEUP, 
    alarmTimeCalendar.getTimeInMillis(), pendingAlarmIntent);

这是解决方案。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimeCalendar.getTimeInMillis(),
    AlarmManager.INTERVAL_DAY, pendingAlarmIntent);

您必须管理和取消此AlarmManager,就好像它是第一种方法一样。如果你忘记了,你的闹钟就会响起。