幽沉谢世事,俯默窥唐虞。这篇文章主要讲述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 请求码,最后是多个权限值。【android 权限库EasyPermissions】这里使用了
@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 通过网络获取图片的源码
- 关于手机搜狗输入法APP
- Android-读取/新增/操作系统联系人数据
- 那些好用的阅读软件(Windows & Android)
- Pandas文摘(Applying Operations Over pandas Dataframes)
- vs code配置flutter开发android
- 为Eclipse安装ADT(Android Development Tools)
- Android Lifecycle使用
- uni-app官方教程学习手记