文章链接: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相关推荐

  1. Android权限说明大全及动态获取权限框架——Easypermissions

    Android6.0把权限分成正常权限和危险权限,AndroidManifest中声明的正常权限系统会自动授予,而危险权限则需要在使用的时候用户明确授予. 换句话说,就是Android6.0以上的系统 ...

  2. Android权限管理详解

    概述 Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用.操作系统或用户有不利影响的任何操作.这包括读写用户的私有数据(如联系人或电子邮件等).读写其他应用的文件.执行网络访问. ...

  3. 【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 ...

  4. android 缓存文件的工具类,总结的一些android公共库,包含缓存(图片缓存、预取缓存)、...

    总结的一些android公共库,包含缓存(图片缓存.预取缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及工具类(下载管理.静默安 ...

  5. android权限申请Permission

    代码地址如下: http://www.demodashi.com/demo/12432.html android在6.0系统以后,权限申请变得麻烦起来,今天介绍一个超级好用的权限申请库,我在使用中经过 ...

  6. 一个常用的Android工具库

    英文版Readme ZXUtils现在已开始逐步加入各种好看的第三方UI控件,全面跨入2.0.0版本. 为更好的使用工具库,仍然采用ZX开头的模式. 从这个版本起,ZXUtils会逐渐加入更多,更全, ...

  7. Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的

    Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...

  8. FFmpeg编译成Android动态库

    项目需要,网上也有现成的FFmpeg Android动态库,但是本着亲力亲为的宗旨,做了不断地尝试,最终也是成功了,在此做一个笔记,以备日后查阅. 附上给我帮助的资料链接: 王英豪大神的博客 雷霄骅大 ...

  9. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  10. 常用Android第三方库推荐

    目录 1 BaseRecyclerViewAdapterHelper 2  Glide开源图片加载类库 3 OKhttp 网络请求框架 4  Retrofit  网络请求框架 5  EventBus事 ...

最新文章

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

热门文章

  1. BackPropagation_01
  2. Java8初体验(二)Stream语法详解
  3. python3第一次作业
  4. iOS 指纹识别常见问题汇总
  5. 链接地址中的target=”_blank”属性安全性处理
  6. IOS - 单例模式+多线程
  7. 【HDU】4391 Paint The Wall
  8. Python【每日一问】35
  9. 洛谷3067 BZOJ 2679题解(折半搜索)
  10. 60、剑指offer--把二叉树打印成多行