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

关于Android6.0权限管理你所需要知道的_第1张图片

Android 6.0(Api 23)推出也有一段时间了,其中附带了很多新的特性, 大幅提升了用户体验的同时也为程序员带来新的负担。运行时的权限管理就是这样, 对于用户来说可以有效保护自己的隐私, 但对于开发者来说就需要重新适配应用权限,本文就让我们一起来探讨一下这个话题吧。

Android的权限系统一直是首要的安全隐私概念,因为这些权限只在安装的时候被询问一次。一旦安装并授权了,app可以在用户毫不知晓的情况下访问权限内的所有东西,那么在这个时候,心怀不轨的人就会利用这个缺陷来搜集用户的数据为所欲为了。

google对于这事也不会熟视无睹,7年之后了,权限系统终于被重新设计了。在android6.0,app将不会在安装的时候授予一大堆权限,取而代之的是,app会在运行时一个一个询问用户是否授相关予权限。

权限询问对话框不会自己弹出来。开发者不得不自己调用。如果你的应用现在跑在api23以上时,你要调用的一些函数需要某权限而用户又拒绝授权的话,函数将抛出异常直接导致程序崩溃。如下图所示


关于Android6.0权限管理你所需要知道的_第2张图片

当然了,授权过后,用户也可以随时在设置里取消已经授权的权限。


关于Android6.0权限管理你所需要知道的_第3张图片
随时可以取消授权

这将会是你的噩梦,意味着你要完全改变以前的的程序逻辑。你不能像以前那样直接调用方法了,你不得不为每个需要的地方检察权限,否则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

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

关于Android6.0权限管理你所需要知道的_第4张图片
危险权限

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

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

关于Android6.0权限管理你所需要知道的_第5张图片
授权流程


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

1.在manifest中申请权限


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

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


关于Android6.0权限管理你所需要知道的_第6张图片
用于检测相关权限是否已经授权

2.首页进行权限检测

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


关于Android6.0权限管理你所需要知道的_第7张图片
危险权限必须授权

3.授权页面

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


关于Android6.0权限管理你所需要知道的_第8张图片
系统授权提示: ActivityCompat.requestPermissions


关于Android6.0权限管理你所需要知道的_第9张图片
缺少权限则显示对话框进行提示

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

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


关于Android6.0权限管理你所需要知道的_第10张图片

你可能感兴趣的:(关于Android6.0权限管理你所需要知道的)