獲取服務
AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
設置鬧鐘
Android4.4以上
方法聲明:
public void setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation)
/*
int type:鬧鐘的類型,常用的有5個值:
AlarmManager.ELAPSED_REALTIME:表示鬧鐘在手機睡眠狀態下不可用,該狀態下鬧鐘使用相對時間(相對於系統啓動開始),狀態值爲3;
AlarmManager.ELAPSED_REALTIME_WAKEUP:表示鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘也使用相對時間,狀態值爲2;
AlarmManager.RTC:表示鬧鐘在睡眠狀態下不可用,該狀態下鬧鐘使用絕對時間,即當前系統時間,狀態值爲1;
AlarmManager.RTC_WAKEUP:表示鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘使用絕對時間,狀態值爲0;
AlarmManager.POWER_OFF_WAKEUP:表示鬧鐘在手機關機狀態下也能正常進行提示功能,所以是5個狀態中用的最多的狀態之一,該狀態下鬧鐘也是用絕對時間,狀態值爲4;不過本狀態好像受SDK版本影響,某些版本並不支持;
long windowStartMillis:
鬧鐘的開始時間
long windowLengthMillis:
鬧鐘窗口時長
PendingIntent operation:
需要執行的操作
*/
示例:
//設置一個10分鐘後執行的鬧鐘,此方法只設置一次
mAlarmManager.setWindow(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 10 * minuteMills,
2 * minuteMills,
yourPendingIntent;
注意:如果設置的起始時間小於當前時間,鬧鐘將會馬上被觸發。如果觸發的事件裏面又設置了一次鬧鐘(相當於遞歸),就會進入死循環。
Android4.4以下:
方法聲明:
//註冊一個新的鬧鈴,一次性鬧鐘
set(int type, long triggerAtMillis, PendingIntent operation)
//註冊一個新的鬧鈴,這個鬧鈴將在指定的時間被準確的執行
setExact(int type, long triggerAtMillis, PendingIntent operation)
//註冊一個對觸發時間並不是很精準的鬧鈴,也就是鬧鐘間隔時間不固定,例如,一個鬧鈴每小時都會重複,但不一定都是在每個小時的最開始被觸發
//triggerAtMillis爲鬧鐘首次執行時間,intervalMillis爲鬧鐘兩次執行的時間間隔
setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
//註冊一個重複類型的鬧鈴
setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
//設定系統時鐘時間
setTime(long millis)
//設置系統默認時區
setTimeZone(String timeZone)
//得到下一個鬧鐘,返回值AlarmManager.AlarmClockInfo
getNextAlarmClock()
//和set方法類似,這個鬧鐘運行在系統處於低電模式時有效
setAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)
示例:
//設置單次鬧鐘
mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + minuteMills, yourPendingIntent);
//設置重複鬧鐘
mAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + minuteMills,
10 * minuteMills,
yourPendingIntent);
取消鬧鐘
//取消參數匹配的鬧鈴
mAlarmManager.cancel(yourPendingIntent);
鬧鐘爲系統級別的一種通知,可以不依賴於應用的存活爲條件,因此也可以用於應用掛掉後定時重啓應用等場景。
//定時重啓
Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
PendingIntent restartIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
AlarmManager mgr = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 500, restartIntent); // 定時重啓應用