2017年4月27日 星期四

Android鬧鐘測試 - 3/3 AlarmManager setAlarmClock及set

此文章記錄了Alarm Manager的方法及測試結果。下面所記錄的不包括API level 22及以上所新增的方法。 下面列出跟Alarm有關的方法,自API level 19開始,Alarm會分為準確(exact)和非準確(inexact),使用非準確的Alarm時,系統會自動提早或延遲Alarm以減少喚醒次數來達到省電的效果。例如你想應用定時跟伺服器同步,因為不需要準確在那一分鐘才同步,所以就可以用這種較省電的Alarm了。可是鬧鐘就不行了,一般都是用準確的Alarm。
非準確的Alarm有以下幾款,但因為這文章的重點是測試用作鬧鐘的Alarm,所以不就下面幾個方法測試了
  • set
    • 自API level 19開始變成非準確的Alarm
  • setRepeating
    • 自API level 19開始,所有重複的Alarm都規定是非準確
  • setInexactRepeating
    • 因為API level 19的改變,變成跟setRepeating一樣功能
此文章會測試以下幾個方法
  • setExact
    • 設定準確的Alarm
  • setWindow
    • 設定半準確的Alarm
  • setAlarmClock
    • 自API level 21新增的方法,設定準確的鬧鐘
  • getNextAlarmClock
    • 自API level 21新增的方法,取得下一個以setAlarmClock新增的Alarm
  • cancel
    • 取消Alarm
3個set Alarm中都要傳入一個PendingIntent,setExact及setWindow要傳入Alarm的種類,而setAlarmClock規定了使用RTC_WAKEUP這類Alarm。
Alarm分為4類,當中只有RTC_WAKEUP適合用作鬧鐘
  1. RTC
    • 實際的時間及不會喚醒系統
  2. RTC_WAKEUP
    • 實際的時間及喚醒系統
  3. ELAPSED_REALTIME
    • 自系統啟動後經過的時間及不會喚醒系統
  4. ELAPSED_REALTIME_WAKEUP
    • 自系統啟動後經過的時間及喚醒系統
下面會測試3個set的方法,看看設定鬧鐘後更改系統時間會有什麼效果。
現在的時間是14:30,設定了鬧鐘在15:00響,然後更改系統時間會有以下效果

  1. 更改時間到14:00,鬧鐘會在1小時後(15:00)響
  2. 更改時間到15:00,鬧鐘會立即響
  3. 更改時間到15:30,鬧鐘也會立即響
由此看到當更改系統時間時,鬧鐘是不會自動調整時間

現在的時間是14:30,時區是GMT+0,設定了鬧鐘在15:00響,然後更改系統時區會有以下效果

  1. 更改時區到GMT+1,鬧鐘會在半小時後(16:00)響
  2. 更改時區到GMT-1,鬧鐘會在半小時後(14:00)響
由此看到當更改系統時區時,鬧鐘會自動調整時間

另外當使用setAlarmClock時,系統會自動出現鬧鐘圖示及顯示下個鬧鐘時間

沒有留言:

張貼留言