一、Android6.0 權限變化
在Android M中權限系統被重新設計,發生了很大的變化。
1. 6.0以后Android權限分普通權限和危險權限,如果應用的targetSdkVersion>=23,危險權限AndroidManifest注冊了也沒用,要用戶動態獲取的,即谷歌為了用戶安全性考慮,對危險權限不再是安裝時許可了,而是使用時讓用戶自己判斷。
二、Android6.0普通權限normal permission 和 危險權限dangerous permission
Normal?Permission:寫在xml文件里,那么App安裝時就會默認獲得這些權限,即使是在Android6.0系統的手機上,用戶也無法在安裝后動態取消這些normal權限,這和以前的權限系統是一樣的,不變。
Dangerous?Permission:還是得寫在xml文件里,但是App安裝時具體如果執行授權分以下幾種情況:
1、targetSDKVersion?<?23?&?API(手機系統)?<?6.0?:安裝時默認獲得權限,且用戶無法在安裝App之后取消權限。
2、targetSDKVersion?>=?23?&?API(手機系統)?<?6.0?:安裝時默認獲得權限,且用戶無法在安裝App之后取消權限。
3、targetSDKVersion < 23 & API(手機系統) >= 6.0 :安裝時默認獲得權限,但是用戶可以在安裝App完成后動態取消授權( 取消時手機會彈出提醒,告訴用戶這個是為舊版手機打造的應用,讓用戶謹慎操作 )。
4、targetSDKVersion?>=?23?&?API(手機系統)?>=?6.0?:安裝時不會獲得權限,可以在運行時向用戶申請權限。用戶授權以后仍然可以在設置界面中取消授權,用戶主動在設置界面取消后,在app運行過程中可能會出現crash。
三、Android 6.0+ 權限的管理?
好處:為Android系統的安全增強保障,用戶能夠有更加透明化的知情權。
壞處:作為開發的程序猿,就開始苦逼了 ,尤其是國產定制出現的各種奇葩,例如 魅、米 系統的定制沒有按照谷歌給的標準(框架)來定制,魅Android6.0(Flyme)系統給用戶的感覺還是6.0以下的系統授權方式,米Android6.0(MIUI)更牛叉,他自己的權限管理高于谷歌給予的權限 在Android系統設置里面設置權限管理(這個權限都是危險權限) 基本上沒有效果,只有在MIUI里面的安全管家的權限管理設置才能生效,這樣類似的定制系統就大大的增加了,開發者的難度。
四、Android6.0權限處理
在權限方面網上有很多大牛們開源的庫 :
2.RxPermissions這個庫可以與新的Android權限模型的rxjava使用M。如果你的項目里面沒有集成rxjava 庫 最好不要使用,因為不能增加應用太多體積,當然了 如果你集成 ?還是不錯的
3.easypermissions是包裝庫來簡化基本系統權限的邏輯時,targetingandroid M或更高。這個也是谷歌官方開源的庫
4.AndPermission這個庫集成方便并且適配不少國產手機? ?Android 6.0 運行時權限管理最佳實踐
5.這個就是系統自帶的方法
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {// 沒有權限。if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {// 用戶拒絕過這個權限了,應該提示用戶,為什么需要這個權限。}else{// 申請授權。ActivityCompat.requestPermissions(thisActivity,newString[]{Manifest.permission.READ_CONTACTS}, MMM);
}}
@OverridepublicvoidonRequestPermissionsResult(intrequestCode, String permissions[],int[] grantResults) {
switch(requestCode) {
caseMMM: {
if(grantResults.length >0&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 權限被用戶同意,可以去放肆了。
}else{// 權限被用戶拒絕了,洗洗睡吧。}return;
}}}
五、國產手機設置權限的頁面(持續更新中。。。)
這個是我從網上收集并總結的一個工具類
這個鏈接地址后期會發出來 (如果沒有發出來可以發郵件到我郵箱提醒我 或者回復 郵箱:1732685009@qq.com)(圖片里面的代碼鏈接)
六、總結
在處理Android6.0權限的過程中,遇到了各種各樣的問題,也在其中收獲了很多東西。在使用過程中不管是使用原生的方法還是第三方開源的庫 在適配國產手機或者一些定制比較深的手機還是會出現各種各樣的問題。Android6.0適配的道路還是任重道遠....... ?
在適配一些奇葩的手機系統時,在我們實在不能判斷權限有無的時候我們可以通過try catch來捕獲異常 從而減少因權限導致的崩潰