文章链接: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. PHP执行一个http请求
  2. ping 工具开发日记(1)
  3. 微信公号“架构师之路”学习笔记(二)-高可用高并发负载均衡的架构设计(冗余+自动故障转移、水平扩展等)
  4. MplusAutomation包的使用 二
  5. Python sys.path、sys.modules模块介绍
  6. Quartz 表达式生成器
  7. 如何将鼠标计算机配置放到板载,罗技G500S游戏鼠标配备有板载内存让鼠标脱离驱动实现自定义功能...
  8. Redis的scan命令
  9. video Station 支持字幕格式
  10. 计算机更新配置卡住了,win10更新设置卡死怎么办|win10更新设置卡死的完美解决方法...
  11. 获取gridview当前选中行的内容
  12. 原生Js通过class属性值获取对象
  13. flashwindow vb_VB6.0 加载ShockwaveFlash(flash)控件
  14. Java某人再玩游戏的时候输入密码123456后成功进入游戏(输错5次则被强行退出)要求用程序实现密码验证的过程。
  15. Java保留字_static
  16. C语言-思路与编程1
  17. 《Mysql是怎样运行的》读书笔记二
  18. java微信红包开发_微信红包算法(java)
  19. pp助手安装失败怎么办?pp助手安装软件失败的解决方法
  20. 基于JSP学生网上选课系统

热门文章

  1. ACM__搜素之BFS与DFS
  2. JSP-Runoob:JSP 文件上传
  3. javase二维数组笔记
  4. 关于使用easyui dataGrid遇到的小bug问题
  5. lax文件的编码问题
  6. asp.net membership 配置错误
  7. 无法安装数据库关系图支持对象的解决方法
  8. winform:關於画非客户区
  9. 巧妙使用JQuery Clone 添加多行数据,并更新到数据库的实现代码
  10. OSI七层模型:TCP/IP HTTP WebSocket MQTT