AlarmManager-鬧鐘服務

AlarmManager-鬧鐘服務

AlarmManager簡介

在特定的時刻爲我們廣播一個指定的Intent,簡單來說就是我們自己定一個時間,然後到時間時,
AlarmManager會爲我們廣播一個我們設定好的Intent,比如指向某個Activity或者Service。

獲得AlarmManager實例

AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);

AlarmManager常用方法解析

  • set(int type,long startTime,PendingIntent pi):一次性鬧鐘
  • setRepeating(int type,long startTime,long intervalTime,PendingIntent pi):
    重複性鬧鐘,和3有區別,3鬧鐘間隔時間不固定
  • setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi):
    重複性鬧鐘,時間不固定
  • cancel(PendingIntent pi):取消AlarmManager的定時服務
  • getNextAlarmClock():得到下一個鬧鐘,返回值AlarmManager.AlarmClockInfo
  • setAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation)
    和set方法類似,這個鬧鐘運行在系統處於低電模式時有效
  • setExact(int type, long triggerAtMillis, PendingIntent operation):在規定的時間精確的執行鬧鐘,比set方法設置的精度更高
  • setTime(long millis):設置系統牆上的時間
  • setTimeZone(String timeZone):設置系統持續的默認時區
  • setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation):
    設置一個鬧鐘在給定的時間窗觸發。類似於set,該方法允許應用程序精確地控制操作系統調
    整鬧鐘觸發時間的程度。

關鍵參數解析

  • Type(鬧鐘類型):
    有五個可選值:
    AlarmManager.ELAPSED_REALTIME:
    鬧鐘在手機睡眠狀態下不可用,該狀態下鬧鐘使用相對時間(相對於系統啓動開始),狀態值爲3;
    AlarmManager.ELAPSED_REALTIME_WAKEUP:
    鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘也使用相對時間,狀態值爲2;
    AlarmManager. RTC
    鬧鐘在睡眠狀態下不可用,該狀態下鬧鐘使用絕對時間,即當前系統時間,狀態值爲1;
    AlarmManager.RTC_WAKEUP
    表示鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘使用絕對時間,狀態值爲0;
    AlarmManager.POWER_OFF_WAKEUP
    表示鬧鐘在手機關機狀態下也能正常進行提示功能,所以是5個狀態中用的最多的狀態之一,該狀態下鬧鐘也是用絕對時間,狀態值爲4;不過本狀態好像受SDK版本影響,某些版本並不支持;
  • startTime:鬧鐘的第一次執行時間,以毫秒爲單位,可以自定義時間,不過一般使用當前時間。
    需要注意的是,本屬性與第一個屬性(type)密切相關,如果第一個參數對應的鬧鐘使用的是相對時間
    (ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那麼本屬性就得使用相對時間
    (相對於系統啓動時間來說),比如當前時間就表示爲:SystemClock.elapsedRealtime();
    如果第一個參數對應的鬧鐘使用的是絕對時間(RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),
    那麼本屬性就得使用絕對時間,比如當前時間就表示 爲:System.currentTimeMillis()。
  • intervalTime:表示兩次鬧鐘執行的間隔時間,也是以毫秒爲單位.
  • PendingIntent:綁定了鬧鐘的執行動作,比如發送一個廣播、給出提示等等。
    PendingIntent是Intent的封裝類。需要注意的是,如果是通過啓動服務來實現鬧鐘提 示的話,PendingIntent對象的獲取就應該採用Pending.getService
    (Context c,int i,Intent intent,int j)方法;如果是通過廣播來實現鬧鐘
    提示的話,PendingIntent對象的獲取就應該採用 PendingIntent.getBroadcast
    (Context c,int i,Intent intent,int j)方法;如果是採用Activity的方式來實
    現鬧鐘提示的話,PendingIntent對象的獲取就應該採用
    PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。
    如果這三種方法錯用了的話,雖然不會報錯,但是看不到鬧鐘提示效果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章