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事 ...
最新文章
- python标准函数有哪些_python基本语法有哪些?
- 通俗易懂的Redis数据结构基础教程
- Jquery中的hover()和toggle()用法
- 使用 Docker 部署 Spring Boot 项目
- 华硕老毛子(Padavan)——Ngrok内网穿透解决方案
- MySQL数据库:explain执行计划详解
- 黑马C++设计模式1
- BZOJ 1137 半平面交
- linux Tcpdump 抓包 win大小异常
- 研发工程规范性模型-DevSecOps
- ps aux、ps -aux、ps -ef之间的区别
- 图:出场顺序号码随机抽取及公开展示,并行随机抽取多个题目号码及公开展示-软件原型设计
- 物流公司货运配送管理系统设计
- 基础回顾:测井曲线划分油、气、水层
- 蓝桥杯 受伤的皇后(dfs)
- linux安装包apr安装说明,Linux下安装Apr及其Apr-util的基本步骤
- 【空指针异常,也不全是。】
- idea新建的springBoot项目,自动生成的入口类中提示错误Cannot resolve symbol ‘@springbootapplication‘
- 引领半开放主动降噪新技术,华为全新无线蓝牙耳机FreeBuds 4发布
- [RK3288][Android6.0] 移植笔记 --- 固件无法下载到eMMC调试