天天看點

Android 6.0 運作時權限處理問題

自從更新到android m以來,最大的改變就是增加了運作時權限runtimepermission,6.0以上的系統如果沒有做适配,運作了targetsdk=23的app時就會報權限錯誤。我們知道6.0以下的系統是按照的時候權限申請的,6.0和之後的版本是我們想要使用某個app的權限,去動态申請的,這也是基于安全上的考慮吧(比如:單機的象棋對戰,請求通路通訊錄權限等不合理的權限,這肯定是有問題的)。

為了保護使用者的隐私,谷歌官方将權限分為了兩類,一個是正常權限(normal permissions),這類權限不涉及使用者隐私,是不需要使用者進行授權的,比如通路網絡,手機震動等。還有一類是危險權限(dangerous permissions),一般是涉及到使用者隐私的,需要使用者進行授權,比如操作sd卡的寫入,相機,錄音等。

我們來看一張權限的清單檔案:

Android 6.0 運作時權限處理問題

我們可以通過adb shell pm list permissions -d -g進行檢視。

權限如何申請

那麼對于我們開發者來說,怎麼适配6.0呢?按着官方的api走就行:

1,在androidmanifest檔案中添加需要的權限。

2,檢查權限

建議這些檢查權限的代碼可以寫到基類裡面去。

3,申請授權

說明:第一個參數是context;第二個參數是需要申請的權限的字元串數組;第三個參數為requestcode,主要用于回調的時候檢測。可以第二個參數看出,6.0是一次性申請多個權限的,系統會通過對話框逐一詢問使用者是否授權。

4,處理權限申請回調

不過這裡有個情況,對于使用者上次拒絕的權限,在下次需要這個權限的時候,系統怎麼處理的了?

是以完整的處理邏輯:

項目實踐

權限工具類:

這裡可以根據實際情況進行優化和擴充

基類:

測試:

繼續閱讀