android 权限库EasyPermissions
文章链接:https://mp.weixin.qq.com/s/H63Sn03xV0JoINXB4SWWKA
众所周知,在android 6.0之后,如果应用程序需要危险权限,则用户必须明确向应用授予该权限。今天推荐一个权限相关的库EasyPermissions。
以相机权限来看,先看下不使用库的情况下的授权方式。
通过ContextCompat.checkSelfPermission()
去判断有没有权限的,没有ActivityCompat.requestPermissions()
去请求权限,有的话则直接调用拍照的
private void requestPermission() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {//权限判断,没有就去请求所需权限,传参 需要申请的权限(可以多个), requestCode请求码用于结果回调里判断ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CODE);}else {//有权限直接拍照,6.0以下的手机拍照走这里takePhoto();}
}private void takePhoto(){Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivity(intent);
}
调用requestPermissions()
方法后需要在Activity中重写onRequestPermissionsResult()
来获取回调结果。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (PERMISSIONS_REQUEST_CODE == requestCode) {for (int x : grantResults) {if (x == PackageManager.PERMISSION_DENIED) {//权限拒绝了return;}}takePhoto();}
}
使用EasyPermissions 来请求权限
依旧以拍照举例
同样需要在重写onRequestPermissionsResult()
,这里就直接将请求结果传递EasyPermission 来处理。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
EasyPermissions.hasPermissions(Context context,String... perms)
用于检查权限是否授权,第二个参数可传多个权限值。
EasyPermissions.requestPermissions(context,String rationale,int requestCode,String... perms)
用于请求权限,rationale 是提示文字,requestCode 请求码,最后是多个权限值。
这里使用了@AfterPermissionGranted
注解。
@AfterPermissionGranted(PERMISSIONS_REQUEST_CODE)
private void requestPermission(){String[] perms = {Manifest.permission.CAMERA};//权限判断,第一次弹出系统的授权提示框if (EasyPermissions.hasPermissions(this, perms)) {//@AfterPermissionGranted 有权限直接执行 todo...}else {//没有权限的话,先提示,点确定后弹出系统的授权提示框EasyPermissions.requestPermissions(this, "拍照过程需要用到相机权限",PERMISSIONS_REQUEST_CODE, perms);}
}
EasyPermissions 库提供了权限请求的回调,activity实现 EasyPermissions.PermissionCallbacks
重写两个方法回调。
/*** 允许权限成功后触发*/
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
}/*** 禁止权限后触发*/
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {//在权限弹窗中,用户勾选了'不在提示'且拒绝权限的情况触发,可以进行相关提示。}
}
使用@AfterPermissionGranted
注解,当权限请求被用户允许后,会根据requestCode来直接执行权限允许后的代码。
...
if (EasyPermissions.hasPermissions(this, perms)) {//加了@AfterPermissionGranted,授权成功后偶直接执行里面代码
}
...
不需要在权限成功回调中再去执行代码,简化了流程。
EasyPermissions 库地址https://github.com/googlesamples/easypermissions
欢迎关注我的个人博客:https://www.manjiexiang.cn/
更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!
android 权限库EasyPermissions相关推荐
- Android权限说明大全及动态获取权限框架——Easypermissions
Android6.0把权限分成正常权限和危险权限,AndroidManifest中声明的正常权限系统会自动授予,而危险权限则需要在使用的时候用户明确授予. 换句话说,就是Android6.0以上的系统 ...
- Android权限管理详解
概述 Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用.操作系统或用户有不利影响的任何操作.这包括读写用户的私有数据(如联系人或电子邮件等).读写其他应用的文件.执行网络访问. ...
- 【Android 逆向】Android 权限 ( ro.product.cpu.abi 属性 | ro.zygote 属性 | dhcp.eth0 属性 | net.* 属性 )
文章目录 一.Android 权限相关的重要的系统属性 1.ro.product.cpu.abi 属性 2.ro.zygote 属性 3.dhcp.eth0 属性 4.net.* 属性 一.Andro ...
- android 缓存文件的工具类,总结的一些android公共库,包含缓存(图片缓存、预取缓存)、...
总结的一些android公共库,包含缓存(图片缓存.预取缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及工具类(下载管理.静默安 ...
- android权限申请Permission
代码地址如下: http://www.demodashi.com/demo/12432.html android在6.0系统以后,权限申请变得麻烦起来,今天介绍一个超级好用的权限申请库,我在使用中经过 ...
- 一个常用的Android工具库
英文版Readme ZXUtils现在已开始逐步加入各种好看的第三方UI控件,全面跨入2.0.0版本. 为更好的使用工具库,仍然采用ZX开头的模式. 从这个版本起,ZXUtils会逐渐加入更多,更全, ...
- Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的
Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...
- FFmpeg编译成Android动态库
项目需要,网上也有现成的FFmpeg Android动态库,但是本着亲力亲为的宗旨,做了不断地尝试,最终也是成功了,在此做一个笔记,以备日后查阅. 附上给我帮助的资料链接: 王英豪大神的博客 雷霄骅大 ...
- ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。
DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...
- 常用Android第三方库推荐
目录 1 BaseRecyclerViewAdapterHelper 2 Glide开源图片加载类库 3 OKhttp 网络请求框架 4 Retrofit 网络请求框架 5 EventBus事 ...
最新文章
- PHP执行一个http请求
- ping 工具开发日记(1)
- 微信公号“架构师之路”学习笔记(二)-高可用高并发负载均衡的架构设计(冗余+自动故障转移、水平扩展等)
- MplusAutomation包的使用 二
- Python sys.path、sys.modules模块介绍
- Quartz 表达式生成器
- 如何将鼠标计算机配置放到板载,罗技G500S游戏鼠标配备有板载内存让鼠标脱离驱动实现自定义功能...
- Redis的scan命令
- video Station 支持字幕格式
- 计算机更新配置卡住了,win10更新设置卡死怎么办|win10更新设置卡死的完美解决方法...
- 获取gridview当前选中行的内容
- 原生Js通过class属性值获取对象
- flashwindow vb_VB6.0 加载ShockwaveFlash(flash)控件
- Java某人再玩游戏的时候输入密码123456后成功进入游戏(输错5次则被强行退出)要求用程序实现密码验证的过程。
- Java保留字_static
- C语言-思路与编程1
- 《Mysql是怎样运行的》读书笔记二
- java微信红包开发_微信红包算法(java)
- pp助手安装失败怎么办?pp助手安装软件失败的解决方法
- 基于JSP学生网上选课系统