返回

Android 6.0 运行时权限管理实践手册

Android

今天来跟大家聊这样一个话题——权限。正如各位所知,传统意义上的权限是在用户安装APP时被许可的。尽管在使用过程中,某些第三方Rom或者安全软件会再次提示权限,但从系统本身来说,就是被放行了。

在Google推出6.0之后,引入了新的权限机制,叫做运行时权限(Runtime Permissions)。顾名思义,运行时权限是在程序运行期间才请求的,而不是在安装时。用户可以选择是否授予权限,并且可以通过设置来随时撤销。

为什么要引进运行时权限呢?原因有很多,其中最重要的是为了保护用户隐私和数据安全。传统的权限机制存在很大的安全漏洞,恶意程序可以轻松地获取用户敏感信息,而用户却无从得知。运行时权限可以有效地防止这种情况的发生,因为用户可以在使用功能之前,自行选择是否授予权限。

当然,运行时权限也给开发人员带来了一些挑战。首先,开发人员需要在程序中动态申请权限,这会增加代码的复杂性。其次,用户可能会拒绝授予权限,这会影响程序的正常运行。

为了帮助开发人员应对这些挑战,Android 6.0提供了很多新特性,例如Permission Groups、Rationale Dialog和Protected Broadcast。这些特性可以简化权限申请的过程,并且可以帮助用户理解为什么要授予权限。

在本文中,我们将深入探讨Android 6.0中的运行时权限,并提供一套完整的权限管理实践方案,帮助开发者轻松应对权限申请。读完本文,你将对权限管理有更加深入的理解,并能够开发出符合新规定的应用程序。

一、权限概述

Android中的权限分为两大类:普通权限和危险权限。普通权限是那些不会对用户隐私和安全造成严重影响的权限,例如访问网络、存储文件等。危险权限是那些可能对用户隐私和安全造成严重影响的权限,例如读取联系人信息、拨打电话等。

运行时权限只针对危险权限,普通权限仍然是在安装时申请的。

二、动态申请权限

在Android 6.0中,危险权限需要在程序运行期间动态申请。开发人员可以通过以下步骤动态申请权限:

  1. 在程序中使用ContextCompat.checkSelfPermission()检查权限是否已经授予。
  2. 如果权限未被授予,使用ActivityCompat.requestPermissions()请求权限。
  3. 在onActivityResult()方法中处理权限申请结果。

三、权限组

为了简化权限申请的过程,Android 6.0引入了权限组的概念。权限组是一组相关的权限,它们可以同时被申请。例如,"联系人"权限组包含"读取联系人信息"和"写入联系人信息"两个权限。

开发人员可以通过在清单文件中使用标签来声明权限组。例如,要声明"联系人"权限组,可以使用如下代码:

<uses-permission-sdk-23 android:name="android.permission-group.CONTACTS" />

四、Rationale Dialog

Rationale Dialog 是一个对话框,用于向用户解释为什么需要授予某个权限。当用户第一次拒绝授予权限时,系统会自动显示Rationale Dialog。Rationale Dialog应该包含如下内容:

  • 程序名称和图标
  • 请求的权限
  • 请求权限的原因

Rationale Dialog可以帮助用户理解为什么要授予权限,并增加他们授予权限的可能性。

五、Protected Broadcast

Protected Broadcast是一个新的广播机制,用于保护敏感信息。Protected Broadcast只能被授予权限的程序接收。

开发人员可以通过在清单文件中使用标签来声明Protected Broadcast。例如,要声明一个名为"my-protected-broadcast"的Protected Broadcast,可以使用如下代码:

<protected-broadcast android:name="my-protected-broadcast" />

六、权限管理实践方案

以下是一套完整的权限管理实践方案,可以帮助开发者轻松应对权限申请:

  • 在程序中使用ContextCompat.checkSelfPermission()检查权限是否已经授予。
  • 如果权限未被授予,使用ActivityCompat.requestPermissions()请求权限。
  • 在onActivityResult()方法中处理权限申请结果。
  • 使用权限组来简化权限申请的过程。
  • 使用Rationale Dialog向用户解释为什么需要授予某个权限。
  • 使用Protected Broadcast来保护敏感信息。

七、总结

运行时权限是Android 6.0中引入的一项重要新特性,它可以有效地保护用户隐私和数据安全。开发人员需要了解运行时权限的机制,并按照本文介绍的实践方案来进行权限管理。只有这样,才能开发出符合新规定的应用程序。