Android权限管理
Android權限管理(PermissionsDispatcher框架使用)
- 簡述
- 一、Android權限
- 二、6.0以上權限管理
簡述
由于對于安全考慮,Android對于權限的管理更加的嚴謹,以6.0位界分為兩種處理方式:6.0以下系統還是保持舊的處理方式,直接在AndroidManifest清單中注冊相應權限就可以;6.0以上系統就需要根據權限的等級(普通權限和危險權限)進行權限注冊,如果是普通權限還是依照之前的處理方式直接在AndroidManifest清單中注冊即可,但是危險權限不僅需要在AndroidManifest清單中注冊且還需要在使用時動態申請;
其實現在主流權限管理框架有三個,分別為PermissionsDispatcher、RxPermissions和easypermissions;在使用中作者方向從代碼簡潔及易用性來說PermissionsDispatcher跟優于其他兩種兩種框架;PermissionsDispatcher是采用注解的方式進行權限管理,RxPermissions是基于RxJava的權限管理,easypermissions是谷歌推出的;有興趣的朋友加深去了解一下;但不管怎么樣這三個框架都簡化了需要動態管理的權限。
一、Android權限
terminal中使用這個命令可以列出調試手機的所有權限,包含應用自定義的權限:
注意:并不是所有的危險權限都能申請,有某些權限系統是默認禁止的,目前暫時沒有任何辦法獲取
二、6.0以上權限管理
在介紹該PermissionsDispatcher框架前我簡述一下,官方或網上給出的很多注冊方式都沒問題的,但是對于Android本身的問題(千奇百怪手機,不同品牌對于系統再次定制),有時總會出現由于考慮不周總會出現這樣那樣的問題會讓你焦頭爛額的,我也是經過多種嘗試,最終覺的還是這個框架還是目前來說最穩定的管理方式;
介紹:PermissionsDispatcher是一個基于注解、幫助開發者簡單處理Android 6.0系統中的運行時權限的開源庫、避免開發者編寫大量繁瑣的樣板代碼并進行了簡化處理。
開源地址:https://github.com/hotchemi/PermissionsDispatcher
文檔介紹:http://hotchemi.github.io/PermissionsDispatcher/
下面開始介紹如何在Android studio使用該框架:
1、添加依賴
在項目工程下的build.gradle文件中加入對maven倉庫依賴引入的支持
之后在module下的build.gradle文件中添加兩項依賴:
implementation 'com.github.hotchemi:permissionsdispatcher:2.3.1' annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.1'并將targetSdkVersion設為23(一定要大于等于23),即:targetSdkVersion 23
2、在Plugins加入PermissionsDispatcher插件
在Android studio加入PermissionsDispatcher插件有益于你后期快速使用PermissionsDispatcher,可以說幾乎于是一鍵導入;
第一步在AS File點擊Setting進入Setting操作面板
第二部,在Setting操作面板選擇Plugins,在右上角輸入框中輸入PermissionsDispatcher搜索,并安裝,安裝后需要重啟
3、在工程中使用PermissionsDispatcher插件開始布局Permissions管理
注意:在使用權限管理框架前,一定要明確一點,一定要Activity/Fragment中使用
第一步:在需要使用權限管理的Activity/Fragment類中右擊如下圖,選擇Generate -> Generate Runtime Permissions…
第二步:如下圖,在權限管理區域選擇相應的權限
然后在Annotations區域,選擇相應的注解,選擇的注解同時需要自定義對應的方法名;
最后點擊“Generate”按鈕;最好強調移一下點擊“Generate”后會有個彈窗,可以選擇rebuild,也可以不用,但一定要在生成的方法前使用public,且再次將工程build-》rebuild project一下,結果如下圖:
以下為注解說明(注:帶注釋的方法一定不能private,一定要為public):
| @RuntimePermissions | 是 | 在Activity的Class聲明此注解,來處理我們的權限 |
| @NeedsPermission | 是 | 請求的權限成功后執行的方法 |
| @OnShowRationale | 否 | 在申請權限前解釋為什么需要這些權限 |
| @OnPermissionDenied | 否 | 當用戶拒絕授權時將調用該方法 |
| @OnNeverAskAgain | 否 | 當用戶選擇了 “不再提醒” 將調用該方法 |
a、@RuntimePermissions注解:這是必須使用的注解,用于標注在你想要申請權限的Activity或者Fragment上:
@RuntimePermissions public class TestActivity extends UMengBaseActivity {b、@NeedsPermission注解:這也是必須使用的注解,用于標注在你要獲取權限的方法,注解括號里面有參數,傳入想要申請的權限。也就是說你獲取了相應的權限成功后就會執行這個方法:
@NeedsPermission(Manifest.permission.CAMERA) public void NeedsMethod() {}c、@OnShowRationale注解:這個不是必須的注解,用于標注申請權限前需要執行的方法,注解
括號里面有參數,傳入想要申請的權限,而且這個方法還要傳入一個PermissionRequest對象,這個對象有兩種方法:proceed()讓權限請求繼續,cancel()讓請求中斷。也就是說,這個方法會攔截你發出的請求,這個方法用于告訴用戶你接下來申請的權限是干嘛的,說服用戶給你權限。
d、@OnPermissionDenied注解:這個也不是必須的注解,用于標注如果權限請求失敗,但是用戶沒有勾選不再詢問的時候執行的方法,注解括號里面有參數,傳入想要申請的權限。也就是說,我們可以在這個方法做申請權限失敗之后的處理,如像用戶解釋為什么要申請,或者重新申請操作等。
@OnPermissionDenied(Manifest.permission.CAMERA) public void DeniedMethod() {}e、@OnNeverAskAgain注解:這個也不是必須的注解,用于標注如果權限請求失敗,而且用戶勾選不再詢問的時候執行的方法,注解括號里面有參數,傳入想要申請的權限。也就是說,我們可以在這個方法做申請權限失敗并選擇不再詢問之后的處理。例如,可以告訴作者想開啟權限的就從手機設置里面開啟。
@OnNeverAskAgain(Manifest.permission.CAMERA) public void AskMethod() {}為什么注解方法前一定要使用public:
原因是只要我們實現了@RuntimePermissions和@NeedsPermission這兩個必須的注解之后,再build一次project之后,編譯器就會在在app\build\intermediates\classes\debug目錄下與被注解的Activity同一個包下生成一個輔助類,名稱為 “被注解的Activity的名稱+PermissionsDispatcher” 的輔助類,用來調用被注解的Activity的方法(就是因為這個所以被注解的方法不能private,private方法的作用域不在其他的類)。所以,第一次用的話,要注解好之后,build一次,下面的方法里面的PermissionsDispatcherActivityPermissionsDispatcher才不會令AS報紅。
最后在相應的方法調用申請方法就可以了
類名:類名+PermissionsDispatcher
方法名:@NeedsPermission注解的方法名+WithCheck
總結
以上是生活随笔為你收集整理的Android权限管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交换机故障诊断与排除
- 下一篇: Android常用的网络权限,Andro