博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android动态权限处理
阅读量:5891 次
发布时间:2019-06-19

本文共 1885 字,大约阅读时间需要 6 分钟。

6.0以后分出了危险权限,危险权限需要动态申请,他们分了组,如果申请了组内的某个权限,那么整个组的权限都会被授予

主要也就几个方法,方法懂了,剩下的就是逻辑了,先看几个重要的方法:

检查权限方法:

//第一个参数Context,第二个参数需要检查的权限 //被授权返回0,否则返回-1 PermissionChecker.checkSelfPermission(mContext, permission); 通常都这么写: // true 表示授权  false表示没有授权     //PackageManager.PERMISSION_GRANTED值为0 PermissionChecker.checkSelfPermission(mContext, permission) == PackageManager.PERMISSION_GRANTED;复制代码

这里另外列出MIUI的权限检查方法,因为上面的方法对于MIUI不管用

//就是要这么写,Process是进程工具类,获的进程的一些信息//被授权返回0,否则返回-1 PermissionChecker.checkPermission(mContext, permission, Process.myPid(), Process.myUid(), mContext.getPackageName())复制代码

申请权限方法:

//在activity中申请 //第二个参数为权限数组,第三个int参数需要记住,他相当于一个标识,一会要用 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 123);复制代码

走了申请权限的方法,就会出这个弹框。当然又有系统差异:

  • 先说华为(EMUI)和原生:这2个表现一样,如果没有权限,走了这句代码,会弹出授权框,如果是已经授予过权限,走了上面的代码不会弹出授权框。
  • 小米(MIUI):不论权限是否授予,只要走了代码就会弹。
  • 魅族(Flyme):不论权限是否授予,都不弹 这里要强调下,只测试了CAMARE和CONTACTS两组权限,系统 EMUI(5.x) ,原生(7.x.x),MIUI(V9.x.x),Flyme(6.2.x.x)

授权回调方法:

走了上面的申请权限方法,用户选择完,就会回调

//第一个参数就是上面申请权限方法需要记住的标识123,第二个参数为你的申请权限的数组,第三个参数是授权回调的结果 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {}复制代码
  • 第二个参数permissions和第三个参数grantResults是对应的,假如permissions中第一项为照相机权限,则在grantResults中的第一项为0表示用户授予了权限,为-1表示拒绝。你可以用这2个数组来对比出哪些权限用户给了,哪些没给。

不再提醒权限方法:(用户勾选拒绝后不再询问)

//参数是一个权限,返回true或falseshouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)复制代码
  • 返回true表示用户没有勾选 拒绝后不再询问,你可以再去调用requestPermissions申请权限

  • 返回false分几种情况: 1.用户勾选拒绝后不再询问,你只能引导用户去设置中开启权限了 2.用户自己在设置中把权限给关了... 3.系统禁止应用具有该权限!

总结一下:

权限处理就上面几个方法,重要的是授权逻辑,怎么才能在保证app正常使用不让用户反感授权,特别是用户拒绝授权的处理,或者偷偷去把权限给关掉的处理。 有一个点要注意:所有需要的权限都需要到manifests中注册,否则你写了动态申请的代码,也不出弹框。 这里提下百度地图,下面的同意按钮一点,好几个权限直接就给了,有一点点想法,但是我应该写不出来想法中的代码,以后水平高了再看看。

更新

2018.01.20 百度地图的授权,试了小米和努比亚直接给授权,但像华为,三星都是会弹系统授权框的。

对于生活理想,应该像宗教徒对待宗教一样充满虔诚与热情!

转载地址:http://dafsx.baihongyu.com/

你可能感兴趣的文章
lintcode 单词接龙II
查看>>
Material Design学习之 ProgreesBar
查看>>
WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案
查看>>
Redis之 命令行 操作
查看>>
Jvm(46),指令集----对象创建与访问指令
查看>>
EL 表达式小结
查看>>
内部排序
查看>>
jQuery EasyUI API 中文文档 - 组合(Combo)
查看>>
10个关于 Dropbox 的另类功用(知乎问答精编)[还是转来了]
查看>>
Oracle体系结构
查看>>
用Modelsim仿真QII FFT IP核的时候出现的Error: Illegal target for defparam
查看>>
javascript Error对象详解
查看>>
nc 局域网聊天+文件传输(netcat)
查看>>
每天一个linux命令(25):linux文件属性详解
查看>>
go微服务框架go-micro深度学习(三) Registry服务的注册和发现
查看>>
python 重载方法有哪些特点 - 老王python - 博客园
查看>>
在Fedora8上安装MySQL5.0.45的过程
查看>>
TCP长连接与短连接的区别
查看>>
设计模式之命令模式
查看>>
android 测试 mondey
查看>>