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