android 权限库EasyPermissions
众所周知,在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公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及Android常用工 ...
- Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类
Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一 ...
- SweetTips: 快意灵动的Android提示库!
此文章是我在简书的文章,自行搬到博客园.简书地址:SweetTips: 快意灵动的Android提示库! 源码及所在DEMO已上传至GitHub:SweetTips,欢迎大家提Bug,喜欢的话记得St ...
- Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的
Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...
- Android 权限处理
概述: 为了保护系统的完整性和用户隐私权,Android 在访问受限的沙盒中运行每款应用. 如果应用需要使用其沙盒以外的资源或信息,则必须明确请求权限. 根据应用请求的权限类型,系统可能会自动授予权限 ...
- Android权限说明 system权限 root权限
原文链接:http://blog.csdn.net/rockwupj/article/details/8618655 Android权限说明 Android系统是运行在Linux内核上的,Androi ...
- 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类
本文转自:http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View( ...
- android权限申请Permission
代码地址如下:http://www.demodashi.com/demo/12432.html android在6.0系统以后,权限申请变得麻烦起来,今天介绍一个超级好用的权限申请库,我在使用中经过再 ...
- ffmpeg学习笔记-Linux下编译Android动态库
Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...
随机推荐
- ShortcutBadgerDemo【安卓应用角标(badge)实现方案】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 本文主要使用的开源库是 leolin310148/ShortcutBadger,但是在其基础上做了一些修改. 什么是应用角标? 1. ...
- Python调用ansible API系列(二)执行adhoc和playbook
执行adhoc #!/usr/bin/env python # -*- coding: utf-8 -*- import sys from collections import namedtuple ...
- 用Docker解决坑爹的环境搭建系列——mysql:5.6
sudo docker pull mysql:5.6 mkdir -p /data/docker/mysql/data /data/docker/mysql/logs /data/docker/mys ...
- SignalR 中丰富多彩的消息推送方式
在上一篇 SignalR 文章中,演示了如何通过 SignalR 实现了简单的聊天室功能:本着简洁就是美的原则,这一篇我们也来聊聊在 SignalR 中的用户和组的概念,理解这些基础知识有助于更好的开 ...
- 产品管理开发之Git工作流和分支规范推荐
前言 无论是开源项目还是内部项目,使用Git都是大势所趋,尤其是在产品管理这块,使用Git大大提高了开发效率和产品的交付频率.本篇,针对Git的工作流和分支使用,进行了一些推荐. 目录 1 产 ...
- Java多线程与并发之面试常问题
JAVA多线程与并发 进程与线程的区别 进程是资源分配的最小单位,线程是CPU调度的最小单位 所有与进程相关的资源,都被记录在PCB(进程控制块)中 进程是抢占处理机的调度单位:线程属于某个进程,共享 ...
- Deepin linux Compass.app安装
compass.app是集成了sass的工具,安装完Compass就能够使用sass. 首先,上官网 可以看到官网上推荐的两种sass使用方式,application&command line ...
- CAP 2.5 版本中的新特性
前言 首先,恭喜 CAP 已经成为 eShopOnContainers 官方推荐的生产环境可用的 EventBus 之一. 自从上次 CAP 2.4 版本发布 以来,已经过去了几个月的时间,关注的朋友 ...
- 使用docker-compose 大杀器来部署服务 上(转)
使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...
- 深入理解this关键字
Java提供了一个this关键字,this关键字总是指向调用该方法的对象.根据this出现的位置的不同,this作为对象的默认引用有两种情形. 1)构造器中引用该构造器正在初始化的对象. 2)在方法中 ...