序
自從更新到android m以來,最大的改變就是增加了運作時權限runtimepermission,6.0以上的系統如果沒有做适配,運作了targetsdk=23的app時就會報權限錯誤。我們知道6.0以下的系統是按照的時候權限申請的,6.0和之後的版本是我們想要使用某個app的權限,去動态申請的,這也是基于安全上的考慮吧(比如:單機的象棋對戰,請求通路通訊錄權限等不合理的權限,這肯定是有問題的)。
為了保護使用者的隐私,谷歌官方将權限分為了兩類,一個是正常權限(normal permissions),這類權限不涉及使用者隐私,是不需要使用者進行授權的,比如通路網絡,手機震動等。還有一類是危險權限(dangerous permissions),一般是涉及到使用者隐私的,需要使用者進行授權,比如操作sd卡的寫入,相機,錄音等。
我們來看一張權限的清單檔案:
我們可以通過adb shell pm list permissions -d -g進行檢視。
權限如何申請
那麼對于我們開發者來說,怎麼适配6.0呢?按着官方的api走就行:
1,在androidmanifest檔案中添加需要的權限。
2,檢查權限
建議這些檢查權限的代碼可以寫到基類裡面去。
3,申請授權
說明:第一個參數是context;第二個參數是需要申請的權限的字元串數組;第三個參數為requestcode,主要用于回調的時候檢測。可以第二個參數看出,6.0是一次性申請多個權限的,系統會通過對話框逐一詢問使用者是否授權。
4,處理權限申請回調
不過這裡有個情況,對于使用者上次拒絕的權限,在下次需要這個權限的時候,系統怎麼處理的了?
是以完整的處理邏輯:
項目實踐
權限工具類:
這裡可以根據實際情況進行優化和擴充
基類:
測試: