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,授权成功后偶直接执行里面代码
}
...
不需要在权限成功回调中再去执行代码,简化了流程。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Rust 开发 PostgreSQL 存储过程中日志的打印
可以直接使用 Rust 的标准宏来打印: eprintln!("test_sql_speed: {:?}", difference); 会打印到 PostgreSQL 的 STDERR 中。 如果没有开启 PostgreSQL 的日志转储功能的话,默认就打到: /var/log/postgresql/ 目录下的日志文件里去了。 如果开启了日志转储功能的话,就会打到数据目录下的 log 目录里去了,不过这个速度稍有点慢,要等个几秒才会出来。 在本机调试最好不要开日志转储,而直接监视/var/log/postgresql/postgresql-10-main.log 文件。
-
下一篇
阿里云产品介绍
https://dwz.cn/dR4mHFaw最近正好对这些产品做过总结,我来介绍一下阿里云主要的产品及功能: ECS (Elastic Compute Service):以虚拟机的方式将一台物理机分成多台云服务器,提供可伸缩的计算服务。 SLB (Server Load Balance):基于LVS和Tengine实现的4层和7层负载均衡,有动态扩容,session保持等特点。 RDS (Relational Database Service);:通过云服务的方式让关系型数据库管理、操作和扩展变得更加简单。 OCS (Open Cache Service):基于内部Tair,增加一层Proxy,支持海量小数据的高速访问。 OTS(Open Table Service):海量(结构化)数据存储和实时查询服务。 OSS(Open Store S
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL数据库在高并发下的优化方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题