如何取消鬧鈴

如果要取消鬧鈴,並且沒有用於設定鬧鈴的原始 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);
}