Here is an extended example of the problem. It is 1:30AM. Alarm is set for later today, at 10AM. I change my phones time to 1159PM yesterday. Alarm Manager instantly triggers, at the wrong time.
How do I stop the AlarmManager from ringing if the time is in the past?
If however, I change the time forward, nothing happens.
I do not want this to happen with my app, as it does not happen with other Alarm apps. Is there a way to make sure that the Alarm manager only rings at the exact minute it is set (if not skip it)?
Here is my Alarm Manager code.
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);
I have tried using a BroadcasetReceiver to catch the Time/Date change events, but there is too much lag between the broadcast, and the AlarmManager firing because it is set in the past.
I have found the solution. It feels odd, but it is solid.
Here is what I was using originally.
alarmManager.set(AlarmManager.RTC_WAKEUP,
alarmTimeCalendar.getTimeInMillis(), pendingAlarmIntent);
This was the solution.
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimeCalendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingAlarmIntent);
You will have to manage and cancel this AlarmManager as if it was the first method. If you forget, your alarm will ring when it should not.