以一個鬧鐘的應用來說,一般都是用送出廣播的方式。可是flag要設定那一個官方文件就找不到相關資料,只列出以下解釋。
- FLAG_CANCEL_CURRENT
- 如果找到相同的PendingIntent會把舊的刪除然後再建立一個新的
- FLAG_UPDATE_CURRENT
- 如果找到相同的PendingIntent會更新intent
- FLAG_NO_CREATE
- 如果找不到相同的PendingIntent會返回null,但是不會建立一個新的
- FLAG_ONE_SHOT
- PendingIntent只會執行一次
在這次測試中會使用下面三個function,一個是建立Alarm,一個是更新,Alarm,另一個是取消Alarm,測試一下用不同的flag來看對設定鬧鐘有什麼實際的影響。
- set_alarm使用FLAG_CANCEL_CURRENT
- cancel_alarm及update_alarm使用FLAG_CANCEL_CURRENT
- 成功建立,更新及取消Alarm,但當取消時通知列的鬧鐘圖示不會消失,時間到達時才會消失但鬧鐘並不會響
- cancel_alarm及update_alarm使用FLAG_UPDATE_CURRENT
- 成功建立,更新及取消Alarm
- cancel_alarm及update_alarm使用FLAG_NO_CREATE
- 成功建立Alarm及找到並返回相同的PendingIntent
- cancel_alarm及update_alarm使用FLAG_ONE_SHOT
- 成功建立Alarm但不能取消,更新Alarm也不能正常運作,最終建立了兩個鬧鐘
- set_alarm使用FLAG_UPDATE_CURRENT
- cancel_alarm及update_alarm使用FLAG_CANCEL_CURRENT
- 成功建立,更新及取消Alarm,但當取消時通知列的鬧鐘圖示不會消失,時間到達時才會消失但鬧鐘並不會響
- cancel_alarm及update_alarm使用FLAG_UPDATE_CURRENT
- 成功建立,更新及取消Alarm
- cancel_alarm及update_alarm使用FLAG_NO_CREATE
- 成功建立Alarm及找到並返回相同的PendingIntent
- cancel_alarm及update_alarm使用FLAG_ONE_SHOT
- 成功建立Alarm但不能取消,更新Alarm也不能正常運作,最終建立了兩個鬧鐘
- set_alarm使用FLAG_ONE_SHOT
- cancel_alarm及update_alarm使用FLAG_CANCEL_CURRENT
- 成功建立Alarm但不能取消,更新Alarm也不能正常運作,最終建立了兩個鬧鐘
- cancel_alarm及update_alarm使用FLAG_UPDATE_CURRENT
- 成功建立Alarm但不能取消,更新Alarm也不能正常運作,最終建立了兩個鬧鐘
- cancel_alarm及update_alarm使用FLAG_NO_CREATE
- 成功建立Alarm但找不到相同的PendingIntent,返回null
- cancel_alarm及update_alarm使用FLAG_ONE_SHOT
- 成功建立,更新及取消Alarm
從以上測試結果可看到
- 使用FLAG_CANCEL_CURRENT或FLAG_UPDATE_CURRENT建立的Alarm要用FLAG_UPDATE_CURRENT更新或取消。
- 使用FLAG_ONE_SHOT建立的Alarm要用FLAG_ONE_SHOT更新或取消。
- 以FLAG_NO_CREATE來找有沒有相同Alarm時,只會找到以FLAG_CANCEL_CURRENT或FLAG_UPDATE_CURRENT建立的Alarm。
- 另外如果雖要建立多個不同的Alarm時,要使用不同的requestCode,系統就會建立一個新的Alarm而不會動到舊的Alarm。
- 在搜索鬧鐘程式範例時,所找到的資料都沒有提到使用不同的flag會有什麼不同的用途,而且官方的文件中都是用0(no flag)去建立Alarm,看來對於Alarm Manager來說這個flag沒有特別用途吧。
沒有留言:
張貼留言