Android 6.0(Api 23)推出也有一段时间了,其中附带了很多新的特性, 大幅提升了用户体验的同时也为程序员带来新的负担。运行时的权限管理就是这样, 对于用户来说可以有效保护自己的隐私, 但对于开发者来说就需要重新适配应用权限,本文就让我们一起来探讨一下这个话题吧。
Android的权限系统一直是首要的安全隐私概念,因为这些权限只在安装的时候被询问一次。一旦安装并授权了,app可以在用户毫不知晓的情况下访问权限内的所有东西,那么在这个时候,心怀不轨的人就会利用这个缺陷来搜集用户的数据为所欲为了。
google对于这事也不会熟视无睹,7年之后了,权限系统终于被重新设计了。在android6.0,app将不会在安装的时候授予一大堆权限,取而代之的是,app会在运行时一个一个询问用户是否授相关予权限。
权限询问对话框不会自己弹出来。开发者不得不自己调用。如果你的应用现在跑在api23以上时,你要调用的一些函数需要某权限而用户又拒绝授权的话,函数将抛出异常直接导致程序崩溃。如下图所示
当然了,授权过后,用户也可以随时在设置里取消已经授权的权限。
随时可以取消授权这将会是你的噩梦,意味着你要完全改变以前的的程序逻辑。你不能像以前那样直接调用方法了,你不得不为每个需要的地方检察权限,否则app就有crash的危险了!
这个新的运行时权限仅当我们设置targetSdkVersion to 23(这意味着你已经在23上测试通过了)才起作用,当然还要是6.0以上系统的手机。所以你也不必担心你那些已经发布过的app了,他们依旧使用旧的权限管理规则:用户在安装的时候不得不接受所有权限,一旦安装成功,就默认接收拥有所有权限了!
当用户安装或更新应用时,系统将授予应用所请求的属于 PROTECTION_NORMAL 的所有权限(安装时授权的一类基本权限)。这类权限包括:
ACCESS_LOCATION_EXTRA_COMMANDS
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
相对应的,就有一部分需要用户动态授权的权限,如下图所示
危险权限有人会问,Android系统包含默认的授权提示框, 我们为什么还需要设置自己的页面呢? 原因是系统提供的授权框, 会有不再提示的选项. 如果用户选择了不再提示, 就无法触发授权提示,而使用我们自定义的提示页面, 可以给予用户手动修改授权的指导。
在Api23以上的开发过程中,权限是需要动态获取的,标准的流程大概如下图所示
授权流程以下实例,将提供一个比较实用的解决方案,用来动态管理授权问题。
1.在manifest中申请权限
危险权限必须要授权,一般权限则不需要这里提供一个检测权限的工具类
用于检测相关权限是否已经授权2.首页进行权限检测
这里假设首页需要相关权限,在onResume()中进行检测,如果缺少对应权限,则进入授权页面,允许接收返回值,再处理对应逻辑;拒绝则直接退出;
危险权限必须授权3.授权页面
授权页, 先使用系统默认的授权页, 当用户拒绝时, 使用自定义授权提示指导用户手动设置, 当用户再次操作失败后, 返回继续提示。 用户手动退出授权页时, 给使用页发送授权失败的通知。
系统授权提示: ActivityCompat.requestPermissions 缺少权限则显示对话框进行提示主要就是以上这些,可能对于开发者来说有点繁琐,因为平时要用到的远不止这些权限,但是这样做的好处是为了提升我大Android的用户体验,想想就不错,哈哈。如果有需要,点击这里查看源码。
科技改变生活,程序改变世界!
网友评论