Android如何取消AlarmManager.setAlarmClock()

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

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

我是这样使用的:

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() 返回这个警报。

最佳答案

PendingIntent.FLAG_CANCEL_CURRENT 表示“取消当前的 PendingIntent”。当您转到 cancel() 时,这会使 AlarmManager 感到困惑,而感到困惑的 AlarmManager 从来都不是一件好事。

仅当您有明确的理由时才使用 PendingIntent.FLAG_CANCEL_CURRENT。不要将它用作某些默认值,“哦,我将使用它而不是 0,因为我喜欢输入很多字符”值。 :-)

关于Android如何取消AlarmManager.setAlarmClock(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434490/

相关文章:

android - 在终止的应用程序中设置警报管理器的 nullPointerException

android - 如何防止警报在启动时运行耗时

java - ListView 自定义适配器 OnClick 启动 URL 链接

android - fragment 不应该有一个选项来在它们的 View 层次结构中保留点击事件吗?

android - 在 Android 上创建约会提醒的最佳方式是什么?

android - 警报在今天凌晨 12 点触发,而不是在 48 小时后触发

android - 用于控制状态栏中的警报图标的 Lollipop API

android - Android 中的警报管理器

android - AsyncTask doInBackground 不运行

php - 我们如何在 Android 和 iPhone 的移动应用程序中对用户进行身份验证?