Android6.0权限

1 什么是Android6.0权限?

Android运行时权限,是为了Android用户的安全性考虑.

2 为什么会出现?

让用户对于应用的权限可控,提高安全性,6.0权限的出现从一定程度上避免了用户的数据泄露,6.0技术出现之前,我们一般都是在清单文件中配置权限,但是如果用户要安装这个应用就必须同意应用获取所申请的权限.这样极大地造成了用户的数据泄露,比如用户下载了一个单机斗地主,你妹啊居然要读取联系人短信..搞毛啊!所以6.0权限系统的出现,可以让用户去可控的操作权限

运行时权限也有缺点的,当你申请的权限被拒绝时,很大程度上你会获取不到数据,会导致代码报错


此外最好是真正要用到这个权限是,再去让用户去选择是否授权,总不能一打开应用弹十几个窗口让用户一通授权,估计用户受不了就直接卸载,我们应该做到当我们用到时再去申请,比如拍照请求打开摄像头,用户知道要拍照才会授权,不授权牌拍啥呢...


运行时权限核心就是一句话:应用运行过程涉及到敏感权限,让用户决定是否授权

3 至于怎么用,下面才是重点

运行时权限核心就是三步走 (需要API23以上)


1 检查是否已获得权限

checkPermission(permission, Process.myPid(),Process.myUid())

2 检查是否需要弹出提示(被用户拒绝过时)

shouldShowRequestPermissionRationale(permission)

3 请求指定权限(参数一是数组可同时请求多个权限)

requestPermissions(Permission,requestCode);


但是实际用起来这个6.0权限还是很麻烦的,所以一般是使用开源项目来搭建我们的项目

提供我用的6.0权限开源项目

https://github.com/googlesamples/easypermissions  
这个项目里面已经帮我们封装好了检查权限,是否弹出提示以及请求权限,以及判断手机版本等等,我们需要做的只是调用开源项目里面的方法,里面也有示例很容易看懂,我就简单的说一下,直接打开示例截图了

这里要说一下,可能很多人都知道,为什么我们在代码中有时需要判断api版本  首先我们代码在编译时并不会将我们用到的系统提供的jar包一起打包到apk中,我们的编译的代码只是引入,最后运行到手机上时引入的代码根据不同的手机提供的jar是不一样的

点击一个按钮调用cameraTask方法,这个方法就是待会我们需要操作6.0权限的方法,这时需要打开摄像机的请求权限

if判断是判断权限是否已经获取到,如果获取到就打个吐司,如果没有获取到就走else去请求权限
这里要注意这个注解,该注解的作用是,如果权限申请成功,就要再次再次执行这个cameraTask方法
注解中的参数是我们定义的一个请求码,当我们请求权限时传过去,第三个参数
请求权限的第二参数,是当请求权限被拒绝时告诉用户为什需要这个权限
请求权限的第一个参数是用来回调,这个前面说过,当请求成功后会继续重新调用cameraTask方法,既然回调就肯定用到这个对象
其实翻一下源码就可以看到,其实对于这个对象还做了判断是否是activity和Fragment的实现类

所以流程是  执行cameraTask方法 ---- 判断是否获取权限------已经获取-------直接打吐司
                                                                                               ------未获取   --------弹出对话框请求权限----授权----------再次执行cameraTask方法
                                                                               -----未授权------结束


这里只是对与框架的使用简单介绍了一下,世纪如果去看这个框架的源码你会发现如果我们自己写会去屑大量的判断以及回调这里不对远吗进行解析,如果以后时间充裕,可以单独发一篇博客介绍框架的源码  

Android6.0权限_第1张图片

这边博客就到这里了,刚开始写博客,排版,描述可能会不太好,希望各位朋友可以谅解,以后会越来越好

你可能感兴趣的:(Android)