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
from yourcancel()
call. – NedryPendingIntent.FLAG_CANCEL_CURRENT
, it's not an optional parameter. – Slavish0
. – Nedry