Android权限管理 1
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中使用这个命令可以列出调试手机的所有权限,包含应用自定义的权限:
adb shell pm list permissions
注意:并不是所有的危险权限都能申请,有某些权限系统是默认禁止的,目前暂时没有任何办法获取
二、6.0以上权限管理
在介绍该PermissionsDispatcher框架前我简述一下,官方或网上给出的很多注册方式都没问题的,但是对于Android本身的问题(千奇百怪手机,不同品牌对于系统再次定制),有时总会出现由于考虑不周总会出现这样那样的问题会让你焦头烂额的,我也是经过多种尝试,最终觉的还是这个框架还是目前来说最稳定的管理方式;
介绍:PermissionsDispatcher是一个基于注解、帮助开发者简单处理Android 6.0系统中的运行时权限的开源库、避免开发者编写大量繁琐的样板代码并进行了简化处理。
开源地址:https://github.com/hotchemi/PermissionsDispatcher
文档介绍:http://hotchemi.github.io/PermissionsDispatcher/
下面开始介绍如何在Android studio使用该框架:
1、添加依赖
在项目工程下的build.gradle文件中加入对maven仓库依赖引入的支持
allprojects {repositories {jcenter()mavenCentral()}
}
之后在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()让请求中断。也就是说,这个方法会拦截你发出的请求,这个方法用于告诉用户你接下来申请的权限是干嘛的,说服用户给你权限。
@OnShowRationale(Manifest.permission.CAMERA)
public void RationaleMethod(final PermissionRequest request) {}
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
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);TestActivityPermissionsDispatcher.NeedsMethodWithCheck(this);//调用此方法即可动态申请权限;
}
Android权限管理 1相关推荐
- android 一个字符串分两行显示_重新梳理Android权限管理
Android Developer指南中,对Android安全体系结构的核心有这么一个说法:默认情况下,任何应用程序都无权执行任何会对其他应用程序.操作系统或者用户产生负面影响的操作.这句话其实就很好 ...
- android 跳转权限管理的代码,Android权限管理
Android权限管理 说明 在targetSdkVersion的值为23或者更高,就要进行权限管理,否则如果运行在Android6.0或以上的设备会没有相应权限而导致崩溃 请求权限后,在onRequ ...
- Android权限管理
Android权限管理 说明 在targetSdkVersion的值为23或者更高,就要进行权限管理,否则如果运行在Android6.0或以上的设备会没有相应权限而导致崩溃 请求权限后,在onRequ ...
- Android权限管理之Permission权限机制及使用
前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...
- android 权限管理之判断禁止后不再提示
android 权限管理之判断禁止后不再提示 我看到了许多博客中写到了单独去判断shouldShowRequestPermissionRationale()方法的值去判断为是否为不再提示,结果遇到了小 ...
- 原生android 权限管理,Android 权限管理(原生、EasyPermissions、RxPermissions)
前言:动态权限管理是Android6.0(Build.VERSION_CODES.M = Api23)推出的,提醒用户当前APP所需要的权限,防止滥用.这些权限一般分为三种:(1)普通权限:直接man ...
- android10管理权限,Android 权限管理
关于运行时权限 在旧的权限管理系统中,权限仅仅在App安装时询问用户一次,用户同意了这些权限App才能被安装(某些深度定制系统另说),App一旦安装后就可以偷偷的做一些不为人知的事情了. 在Andro ...
- Android权限管理原理(含6.0)
前言 Android系统在MarshMallow之前,权限都是在安装的时候授予的,虽然在4.3时,Google就试图在源码里面引入AppOpsManager来达到动态控制权限的目的,但由于不太成熟,在 ...
- android 权限管理 主动防御,基于SEAndroid的敏感数据主被动防御机制分析与设计
摘要: 随着智能移动终端设备市场的不断扩张,Android系统已经成为智能移动终端市场中的领导者,占据着极其巨大的市场份额.与此同时,由于Android系统本身安全机制存在隐患,Android移动智能 ...
- Android权限管理详解
概述 Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用.操作系统或用户有不利影响的任何操作.这包括读写用户的私有数据(如联系人或电子邮件等).读写其他应用的文件.执行网络访问. ...
最新文章
- 计算机视觉方向简介 | 视觉惯性里程计(VIO)
- 使用libjpeg.framework压缩UIImage
- c++ try...catch异常处理
- CSS padding
- 深度学习笔记——基于传统机器学习算法(LR、SVM、GBDT、RandomForest)的句子对匹配方法
- SAP Spartacus B2B List里的listData$设计原理
- [html] 请实现一个文章阅读的进度条
- Nginx的应用之安装配置
- mssql 数据库审计账户_SQLServer数据库审计功能入门之SQL Server审核 (SQL Server Audit)...
- SpringBoot配置文件敏感信息加密,springboot配置文件数据库密码加密jasypt
- 微信支付分使用用户数超2.4亿 每日使用笔数达千万级
- 安装多个不同版本chrome浏览器
- 深信服短信认证云信通短信配置说明
- IO设备错误,无法运行此项请求,要怎样寻回数据
- VS2010中文版MSDN下载地址
- python里美元怎么表示_说说 Python 正则表达式中的插入字符、美元字符
- 安装ssd后不识别网卡_安装固态硬盘后读不出来,怎么解决?
- 数据时代大数据管理,主要有哪些策略?
- mysql安装出现应用程序无法正常启动(oxc000007b)的解决方案
- 计算机开始按钮的功能,Windows7系统开始菜单有哪些新增的功能