Android如何取消AlarmManager.setAlarmClock()

时间:2014-10-17 22:53:22

标签: android alarmmanager android-alarms android-5.0-lollipop

API 21中有new AlarmManager.setAlarmClock(...) method,它会设置新警报并显示状态栏警报图标。

我这样用:

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);

问题是我不知道如何取消此警报,因为此代码不起作用:

am.cancel(PendingIntent.getBroadcast(context, 0, new Intent(ALARM_ALERT_ACTION), PendingIntent.FLAG_CANCEL_CURRENT));

警报本身被取消(我的BroadcastReceiver的onReceive未被调用)但状态栏警报图标仍然显示,并且AlarmManager.getNextAlarmClock()也返回此警报。

1 个答案:

答案 0 :(得分:12)

PendingIntent.FLAG_CANCEL_CURRENT说"取消当前PendingIntent"。当你转到AlarmManager时,这会让cancel()感到困惑,而混淆AlarmManager从来都不是一件好事。

只有在您有明确理由的情况下才能使用PendingIntent.FLAG_CANCEL_CURRENT。不要将它用作默认设置,"哦,我会使用它而不是0,因为我喜欢输入很多字符"值。 : - )