android動態許可權到自定義許可權框架
大家都知道android版本6.0(M)以後需要動態申請許可權,今天我們就講解下關於這塊的知識點,然後用我們之前學的註解知識,寫一個略微裝逼的自定義框架,這篇先科普下基本知識
其實關於動態許可權申請,androidM以後將許可權劃分出來一個危險許可權,比如拍照啊錄音等,你沒啥事申請這些想幹嘛?所以就讓使用者自己去管理是否同意。
6.0的時候某個應用在其清單中列出 READ_EXTERNAL_STORAGE 和WRITE_EXTERNAL_STORAGE。應用請求 READ_EXTERNAL_STORAGE,並且使用者授予了該許可權。如果該應用針對的是 API 級別 24 或更低階別,系統還會同時授予 WRITE_EXTERNAL_STORAGE,因為該許可權也屬於同一 STORAGE 許可權組並且也在清單中註冊過。如果該應用針對的是 Android 8.0,則系統此時僅會授予 READ_EXTERNAL_STORAGE;不過,如果該應用後來又請求 WRITE_EXTERNAL_STORAGE,則系統會立即授予該許可權,而不會提示使用者。
可以說是8.0的一次改變,當然對使用者感知是沒啥的。
我們列舉下危險許可權有哪些,允許我偷張圖,可見許可權還是分組的
可以看出來,這些許可權直接關係我們的隱私。
那麼我們動態許可權申請第一步該做什麼呢?
在AndroidManifest.xml配置需要的許可權,因為不寫,只要申請肯定崩潰
第二步呢?肯定是android 版本判斷啦,如果是低於23肯定就不用動態申請了
以前有個騷操作就是把 targetSdkVersion改成低於23的 ,這樣就不需要做6.0許可權配置
但是隨著谷歌的強行限定現在慢慢的版本都推到26以上了,所以還是別這麼做了
寫上我們需要申請的許可權
檢測是否擁有許可權
PERMISSION_GRANTED代表申請到了許可權,PERMISSION_DENIED代表還木有
如果當前還沒有申請到許可權,那我們就要使用
ActivityCompat.requestPermissions,需要傳三個引數,第一個是Context,第二個是申請許可權的陣列,第三個是申請許可權的code。
申請許可權完成,我們要知道我們申請成功了麼
覆蓋onRequestPermissionsResult 方法
我們發現permissions和grantResults都是陣列,如果我們在申請多個許可權的時候,返回的資料就會是多個,和後面的grantResults一一對應,我們就知道哪個許可權申請成功,哪個失敗,方便我們再次申請
我們這裡只申請了一個,先來測試一下,成功和失敗是怎麼對應的
先測試失敗的
測試成功的
是不是和我們之前的PERMISSION_GRANTED和PERMISSION_DENIED對應起來了?
大家是不是見過這種選項,一旦勾選拒絕了,我們該怎麼辦?
我們看下拒絕後我們再次申請許可權,發現不會出來彈窗了,這咋辦
這個時候我們發現其實我們還是能收到回撥,但是彈窗出不來罷了
我們引入下一個方法
ActivityCompat.shouldShowRequestPermissionRationale
需要傳入倆引數 1Conctex,2申請的許可權,返回boolean值
我們看看這個布林值的返回情況
第一次拒絕許可權申請
第二次同意許可權申請
第三次拒絕加上勾選不提示
我們總結出來個啥子呢
申請失敗的時候,我們在還能再次彈出的時候,返回值是true,申請成功就不會再彈出了,申請失敗,勾選直接返回false,所以當申請失敗,不能彈出的時候,我們就可以認為被勾選了不在提示,那麼我們可以提示使用者,您拒絕了我們的許可權申請,請到設定裡面開啟,不然就無法使用XX功能。
利用許可權申請被拒絕的時候,我們也可以彈出一個彈窗告訴使用者,我們為什麼需要這個許可權,然後可以引導使用者主動申請許可權。
總結一下 動態申請許可權的幾大步驟
- AndroidManifest加入需要申請的危險許可權,具體可以參考上面圖表
- 檢查版本是不是大於M,android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
- 檢查是否已經擁有我們申請的許可權了?ActivityCompat.checkSelfPermission();
- 如果沒有,我們去申請許可權。 ActivityCompat.requestPermissions();
- 覆蓋onRequestPermissionsResult,根據requestCode,permissions,grantResults判斷我們是否申請成功
-
失敗的時候去利用ActivityCompat.shouldShowRequestPermissionRationale檢查我們是不是被勾選了
禁止再詢問選項
到此為止 最基本的許可權申請套路我們學會了,下一步我們將參考現在比較流行的註解許可權框架進行一個框架編寫。
相關文章
- hadoop自定義許可權Hadoop
- Android動態許可權總結Android
- 【自然框架】許可權的視訊演示(二):許可權到欄位、許可權到記錄框架
- DRF內建許可權元件之自定義許可權管理類元件
- Django(63)drf許可權原始碼分析與自定義許可權Django原始碼
- Shiro許可權框架框架
- Android SELinux許可權AndroidLinux
- Android 通知許可權Android
- Vue | 自定義指令和動態路由實現許可權控制Vue路由
- 關於動態許可權
- 許可權之選單許可權
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- Android6.0許可權的動態適配Android
- Android優雅地申請動態許可權Android
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- android 許可權庫EasyPermissionsAndroid
- SpringSecurity:hasAuthority與自定義許可權校驗SpringGse
- 許可權系統:一文搞懂功能許可權、資料許可權
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- Android平臺targetSdkVersion設定及動態許可權Android
- android 許可權元件設計Android元件
- Linux特殊許可權之suid、sgid、sbit許可權LinuxUI
- mysql許可權MySql
- 許可權控制
- Linux許可權Linux
- MongoDB4.0建立自定義許可權(只有查詢,插入和更新的許可權)的角色步驟MongoDB
- 呼叫者許可權與定義者許可權的pl/sql子程式SQL
- 選單許可權和按鈕許可權設定
- Linux的檔案存取許可權和0644許可權Linux
- delphi安卓動態許可權申請安卓
- 使用動態路由實現許可權管理路由
- EDP .Net開發框架--許可權框架
- 許可權框架之Shiro詳解框架
- Spring Boot:整合Shiro許可權框架Spring Boot框架
- Android 中的危險許可權Android
- Android許可權處理分類Android
- Android property屬性許可權新增Android