如何取消闹铃

如果要取消闹铃,并且没有用于设置闹铃的原始 PendingIntent 的引用,则需要重新创建与最初创建时完全相同的 PendingIntent。

AlarmManager 认为 Intent 是相等的

如果他们的行动,数据,类型,类别和类别相同。这不会比较意图中包含的任何额外数据。

通常,每个闹铃的请求代码都定义为常量:

public static final int requestCode = 9999;

因此,对于这样的简单闹铃设置:

Intent intent  = new Intent(this, AlarmReceiver.class);
intent.setAction("SomeAction");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, targetTimeInMillis, pendingIntent);

以下是如何创建新的 PendingIntent 引用,你可以使用它来取消使用新的 AlarmManager 引用的闹铃:

Intent intent  = new Intent(this, AlarmReceiver.class);
intent.setAction("SomeAction");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, requestCode, intent, PendingIntent.FLAG_NO_CREATE);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
if(pendingIntent != null) {
    alarmManager.cancel(pendingIntent);
}