2011-07-15

在 Android 裡使用週期式鬧鐘(AlarmManager)

設定鬧鐘:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 30);
Log.d(TAG, "設定鬧鐘於30秒後: " + cal);

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

PendingIntent pi = PendingIntent.getBroadcast(this.ctx, 1, intent, 0);

AlarmManager am = (AlarmManager) this.ctx.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5 * 1000, pi);
剩下的部份參考 在 Android 裡使用一次性鬧鐘(AlarmManager)

不同的地方在於使用 am.setRepeating(...) 取代 am.set(...) ,第三個參數為鬧鐘時間週期,單位為毫秒。

還有一個不同的地方為 PendingIntent.getBroadcast(...) 最後一個參數,因為是週期式鬧鐘,所以不可以使用 PendingIntent.FLAG_ONE_SHOT,可以直接使用 0,或者用 PendingIntent.FLAG_CANCEL_CURRENT、PendingIntent.FLAG_NO_CREATE、PendingIntent.FLAG_UPDATE_CURRENT,都有一樣的效果,但是我沒深究其中的差異。

沒有留言:

張貼留言