There is this new AlarmManager.setAlarmClock(...) method in API 21, which sets a new alarm and displays a status bar alarm icon.
I use it like this:
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(ALARM_ALERT_ACTION);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.setAlarmClock(new AlarmManager.AlarmClockInfo(time, sender), sender);
The problem is that I don't know how to cancel this alarm, because this code doesn't work:
am.cancel(PendingIntent.getBroadcast(context, 0, new Intent(ALARM_ALERT_ACTION), PendingIntent.FLAG_CANCEL_CURRENT));
The alarm itself is cancelled (my BroadcastReceiver's onReceive is not called) but the status bar alarm icon is still displayed and also AlarmManager.getNextAlarmClock() returns this alarm.
PendingIntent.FLAG_CANCEL_CURRENT
says "cancel the current PendingIntent
". That confuses AlarmManager
when you go to cancel()
it, and a confused AlarmManager
is never a good thing.
Only use PendingIntent.FLAG_CANCEL_CURRENT
when you have a clear reason to do so. Don't use it as some default, "oh, I'll use this instead of 0
, because I like typing in lots of characters" value. :-)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With