2011-07-19

在 Android 裡使用多個鬧鐘設定(AlarmManager)

AlarmManager 可以同時設定多個鬧鐘。

但是在使用同一個 receiver class 時,千萬要小心 PendingIntent 裡的 request code 要不一樣,否則會發生後蓋前的狀況,也就是新設定的鬧鐘會覆蓋先前設定的鬧鐘,只剩下新設定的鬧鐘生效。

使用同一個 PendingIntent 物件來設定鬧鐘,一定發生後蓋前的狀況。

使用不同的 PendingIntent 物件但相同的 request code,還是會發生後蓋前的狀況。
Calendar cal1 = Calendar.getInstance();
cal1.add(Calendar.SECOND, 10);
Log.d(TAG, "設定鬧終於10秒後: " + cal1);

Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.SECOND, 20);
Log.d(TAG, "設定鬧終於20秒後: " + cal2);

Intent intent = new Intent(this.ctx, TestReceiver.class);
intent.putExtra("msg", "傳訊息給鬧鐘");

PendingIntent pi1 = PendingIntent.getBroadcast(this.ctx, 1, intent, 0);
PendingIntent pi2 = PendingIntent.getBroadcast(this.ctx, 2, intent, 0);

AlarmManager am = (AlarmManager) this.ctx.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(), pi1);
am.set(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), pi2);

1 則留言: