Android Studio 2.3.1
targetSdkVersion 25
1. 當你的應用要增加權限前,先要確定一下是否真的需要這個權限實作這個功能, 例如可否以Intent的方法代替。我認為每個應用的權限越少越好,而且也省卻了很多麻煩。
2. 定義應用所需的方法一直都沒有改變,只是簡單地把所需權限加入AndroidManifest.xml
3. 使用者批准權限的方式自Android 6.0 (API level 23)開始有大幅改變
- 在Android 5.1 (API level 22)以下的應用,使用者要先同意所有應用中要求的權限才能安裝,安裝後不能再取消權限,代碼中不用特別再聲明權限了
- 在Android 6.0 (API level 23)開始的應用,使用者在安裝應用時不再需要批准權限了,當應用執行需要特別權限的功能時才向使用者要求權限,同意了才能繼續,使用者不用同意全部權限,而且能隨時在設定中取消已批准權限
- 一般權限是對於重要個人資料外泄或影響系統保安方面是低風險的權限,這類型的權限只需要在Manifest定義了就能自動取得,並不需使用者另外批准,例如使用藍牙的權限
- 危險權限則是相反,是對於重要個人資料外泄或影響系統保安方面是高風險的權限,這類型的權限除了要在Manifest定義了,在應用執行時要取得使用者批准,而且使用者能隨時取消這類型的權限,例子有存取聯絡人的權限
- 當一個權限沒有被歸納為一般或危險時,會將它分類為特別權限,大部分應用都不會用到這一類的權限,有一些是系統專用,也有一些要取得認證才行,例如是直接修改系統設定的權限
- 所有權限都有一個所屬的權限群組,當中危險權限的群組比較重要,下面會用實例解釋及就每一類的權限抽取一個分別在Android 6.0 (API level 23)及Android 5.0 (API level 21)上測試和記錄結果
5. 一般權限 - ACCESS_WIFI_STATE (讀取WiFi狀態)
- Android 5.0 (API level 21) 只需要在安裝前批准權限就能成功取得WiFi狀態
- Android 6.0 (API level 23) 在安裝前沒有顯示所需權限,安裝後直接能取得WiFi狀態
6. 危險權限 - GET_ACCOUNTS(讀取帳戶資料)
- Android 5.0 (API level 21) 只需要在安裝前批准權限就能成功取得帳戶
- Android 6.0 (API level 23) 在安裝前一樣沒有顯示所需權限,但安裝後是不能取得帳戶,因為權限批准的方式改變了,要實時請求權限,加入以下代碼後如果使用者批准就能取得帳戶
- 值得留意的是雖然只是請求取得帳戶的權限,但因為取得帳戶跟讀寫聯絡人的權限是同一組,請求時顯示是取得整組的權限,如果Manifest也定義了讀寫聯絡人的權限的話,即使請求代碼中沒有寫READ_CONTACTS及WRITE_CONTACTS,也能直接存取帳號及聯絡人
- Android 5.0 (API level 21) 只需要在安裝前批准權限就能成功更改設定
- Android 6.0 (API level 23) 在安裝前一樣沒有顯示所需權限,但安裝後是不能更改設定,而且也不能跟危險權限一樣的方法實時請求權限,要用其他方法,加入以下代碼後會開啟系統頁面,在這裡批准了更改才能取得更改系統設定的權限
沒有留言:
張貼留言