美文网首页Android开发
关于Android6.0权限管理你所需要知道的

关于Android6.0权限管理你所需要知道的

作者: leo62 | 来源:发表于2016-05-04 10:51 被阅读109次

    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

    ACCESS_NETWORK_STATE

    ACCESS_NOTIFICATION_POLICY

    ACCESS_WIFI_STATE

    BLUETOOTH

    BLUETOOTH_ADMIN

    BROADCAST_STICKY

    CHANGE_NETWORK_STATE

    CHANGE_WIFI_MULTICAST_STATE

    CHANGE_WIFI_STATE

    DISABLE_KEYGUARD

    EXPAND_STATUS_BAR

    GET_PACKAGE_SIZE

    INSTALL_SHORTCUT

    INTERNET

    KILL_BACKGROUND_PROCESSES

    MODIFY_AUDIO_SETTINGS

    NFC

    READ_SYNC_SETTINGS

    READ_SYNC_STATS

    RECEIVE_BOOT_COMPLETED

    REORDER_TASKS

    REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

    REQUEST_INSTALL_PACKAGES

    SET_ALARM

    SET_TIME_ZONE

    SET_WALLPAPER

    SET_WALLPAPER_HINTS

    TRANSMIT_IR

    UNINSTALL_SHORTCUT

    USE_FINGERPRINT

    VIBRATE

    WAKE_LOCK

    WRITE_SYNC_SETTINGS

    相对应的,就有一部分需要用户动态授权的权限,如下图所示

    危险权限

    有人会问,Android系统包含默认的授权提示框, 我们为什么还需要设置自己的页面呢? 原因是系统提供的授权框, 会有不再提示的选项. 如果用户选择了不再提示, 就无法触发授权提示,而使用我们自定义的提示页面, 可以给予用户手动修改授权的指导。

    在Api23以上的开发过程中,权限是需要动态获取的,标准的流程大概如下图所示

    授权流程

    以下实例,将提供一个比较实用的解决方案,用来动态管理授权问题。

    1.在manifest中申请权限

    危险权限必须要授权,一般权限则不需要

    这里提供一个检测权限的工具类

    用于检测相关权限是否已经授权

    2.首页进行权限检测

    这里假设首页需要相关权限,在onResume()中进行检测,如果缺少对应权限,则进入授权页面,允许接收返回值,再处理对应逻辑;拒绝则直接退出;

    危险权限必须授权

    3.授权页面

    授权页, 先使用系统默认的授权页, 当用户拒绝时, 使用自定义授权提示指导用户手动设置, 当用户再次操作失败后, 返回继续提示。 用户手动退出授权页时, 给使用页发送授权失败的通知。

    系统授权提示: ActivityCompat.requestPermissions 缺少权限则显示对话框进行提示

    主要就是以上这些,可能对于开发者来说有点繁琐,因为平时要用到的远不止这些权限,但是这样做的好处是为了提升我大Android的用户体验,想想就不错,哈哈。如果有需要,点击这里查看源码

    科技改变生活,程序改变世界!

    相关文章

      网友评论

        本文标题:关于Android6.0权限管理你所需要知道的

        本文链接:https://www.haomeiwen.com/subject/kytkrttx.html