Android鬧鐘服務AlarmManager

獲取服務

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); // 定時重啓應用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章