獲取服務
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:表示鬧鐘在手機睡眠狀態(tài)下不可用,該狀態(tài)下鬧鐘使用相對時間(相對于系統(tǒng)啟動開始),狀態(tài)值為3;
AlarmManager.ELAPSED_REALTIME_WAKEUP:表示鬧鐘在睡眠狀態(tài)下會喚醒系統(tǒng)并執(zhí)行提示功能,該狀態(tài)下鬧鐘也使用相對時間扼睬,狀態(tài)值為2;
AlarmManager.RTC:表示鬧鐘在睡眠狀態(tài)下不可用悴势,該狀態(tài)下鬧鐘使用絕對時間窗宇,即當前系統(tǒng)時間,狀態(tài)值為1特纤;
AlarmManager.RTC_WAKEUP:表示鬧鐘在睡眠狀態(tài)下會喚醒系統(tǒng)并執(zhí)行提示功能军俊,該狀態(tài)下鬧鐘使用絕對時間,狀態(tài)值為0捧存;
AlarmManager.POWER_OFF_WAKEUP:表示鬧鐘在手機關機狀態(tài)下也能正常進行提示功能蝇完,所以是5個狀態(tài)中用的最多的狀態(tài)之一官硝,該狀態(tài)下鬧鐘也是用絕對時間,狀態(tài)值為4短蜕;不過本狀態(tài)好像受SDK版本影響氢架,某些版本并不支持;
long windowStartMillis:
鬧鐘的開始時間
long windowLengthMillis:
鬧鐘窗口時長
PendingIntent operation:
需要執(zhí)行的操作
*/
示例:
//設置一個10分鐘后執(zhí)行的鬧鐘朋魔,此方法只設置一次
mAlarmManager.setWindow(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 10 * minuteMills,
2 * minuteMills,
yourPendingIntent;
注意:如果設置的起始時間小于當前時間岖研,鬧鐘將會馬上被觸發(fā)。如果觸發(fā)的事件里面又設置了一次鬧鐘(相當于遞歸)警检,就會進入死循環(huán)孙援。
Android4.4以下:
方法聲明:
//注冊一個新的鬧鈴
set(int type, long triggerAtMillis, PendingIntent operation)
//注冊一個新的鬧鈴,這個鬧鈴將在指定的時間被準確的執(zhí)行
setExact(int type, long triggerAtMillis, PendingIntent operation)
//注冊一個對觸發(fā)時間并不是很精準的鬧鈴扇雕,例如拓售,一個鬧鈴每小時都會重復,但不一定都是在每個小時的最開始被觸發(fā)
//triggerAtMillis為鬧鐘首次執(zhí)行時間镶奉,intervalMillis為鬧鐘兩次執(zhí)行的時間間隔
setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
//注冊一個重復類型的鬧鈴
setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
//設定系統(tǒng)時鐘時間
setTime(long millis)
//設置系統(tǒng)默認時區(qū)
setTimeZone(String timeZone)
示例:
//設置單次鬧鐘
mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + minuteMills, yourPendingIntent);
//設置重復鬧鐘
mAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + minuteMills,
10 * minuteMills,
yourPendingIntent);
取消鬧鐘
//取消參數(shù)匹配的鬧鈴
mAlarmManager.cancel(yourPendingIntent);
鬧鐘為系統(tǒng)級別的一種通知础淤,可以不依賴于應用的存活為條件,因此也可以用于應用掛掉后定時重啟應用等場景哨苛。
//定時重啟
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); // 定時重啟應用