為什麼要更新?
如果你要從android 12以下的App在今年相容於Android 13 (新上架app記得需要在2023/05, 已經在架上的App記得都會在2023/11強制要求更新)
如果既有APP我在當年無法更新到支援版本怎麼辦 ?
另外今年2022增加了一個條款,舊有的App如果在當年的11月無法來得及更新,可以要求延長最多5個月還是6個月的更新期,也就是當新版本發表後 (譬如2022/05發表, 通常到隔年11月會要求要更新,然後延長5個月後,等於發表後最晚有兩年的時候可以更新上)
更新到Android 13後你會遇到個幾個問題
1. 增加了通知權限 (Notification Runtime Permission)
在Android 13顯示通知訊息預設是無法取得權限的,因此就像其他的runtime permission一樣,必須透過系統詢問使用者後,才能有顯示通知的權限,但這又分為兩個情況
a. 已經裝有app但是相容 android 12裝置版本,這時候如果安裝在android 13,系統會自動在需要顯示通知的時候跳出通知權限詢問
b. 如果從android 12相容版本,升級到android 13相容版本,預設會可以拿到通知權限
c.如果全新安裝android 13版本,就一定需要顯示runtime permission的實做
不過跟其他權限有點不太一樣的地方是,就算沒有拿到權限,一樣可以執行通知的api,只是他就不會顯示在通知欄就是,但至少不會crash
而這邊有一個例外,就是android 13在通知列增加了一個Foreground Service Task Manager ,他會在通知欄下拉在下拉的最下方處,當你有前景服務宣告的時候,不管有沒有通知權限,都一律會顯示在這邊,使用者可以察覺有什麼app正在執行中,並且可以隨時終止該app
透過指令測試你的通知狀態
你也可以透過 adb來模擬各種安裝時後的狀況,而不用真的用android 版本來安裝測試各種升級狀況
透過api判斷是否可以送出通知
areNotificationsEnabled()
宣告權限
在runtime permission中有幾個情況,使用者允許,就可以繼續執行,不允許這時候可以透過api 詢問系統是否建議需要顯示使用權限原因,如果需要才說明為什麼你會需要使用該權限給使用者知道,然後讓他們在一次進行允許通知,直到使用者再次不允許之後,就不能在顯示詢問騷擾使用者了。另外有一個case就是使用者將之滑掉,這時候你會獲得isNotGranted的callback,不像是不允許的狀況,你下次還是可以繼續詢問。
2. 檔案存取權限增加更細緻的存取分類 / 寫入權限的異動
以前是為了讀寫外部空間的照片影片或者sdcard資料夾權限,但在android 10之後其實就已經沒有write_external_storage的權限了(除了你需告為legacy),因此讀取多媒體照片就已經不能使用傳統的File+路徑的方式去讀取對應的資料夾或者檔案,必須透過MediaStore、ContentResolver取得權限後進行取得,然後再Android 13中權限分的更細緻了,如果你只是要讀取照片,僅需要宣告
Manifest.permission.READ_MEDIA_IMAGES
如果是影片
Manifest.permission.READ_MEDIA_VIDEO
如果是聲音
Manifest.permission.READ_MEDIA_AUDIO
權限將變得更細緻化,不會讓明明只是圖片管理軟體,卻可以偷讀你的影片分析情況發生
相對要注意宣告的runtime permission也是需要定義此權限,並且權限會取代原本的空間儲存權限
Photo Picker
另外在android 11也增加了一個更好用的Photo Picker,可以多選單選等等,但可惜的是他只從android 11之後才能使用
至於怎麼透過ContentResolver來取得照片清單呢?可以參考官網
並且可以參考官方github,不過注意的是官方還沒有修改可以支援到android 13 ,因此必須針對permission的判斷還有compileSdk改為33,同時要注意權限宣告需要加入READ_MEDIA_IMAGES 的權限,如果要手動測試,也可以手動針對權限開關去開啟,也是可以達到測試目的
當中可以直接參考他的viewModel,跑過是可以正常執行的,並且向下相容於android 4.1的樣子 (其實mediaStore在android api 1 就存在了)
4. AD_ID的宣告
如果你的其他部分有用到firebase的AD_ID,你也必須宣告此權限,並且在填寫Google Play 上的稱明時候,必須明確的宣告才不會讓審查的時候不通過
5. 其他
non-Sdk的限制
New rumtime permission for neaby Wi-Fi devices
周圍wifi裝置的取得權限
Use of body sensors in the background requires new permission
電池的限制模式
如果使用者把你的app設定在限制模式,你會接收不到開機通知的boot-completed