应用权限通过保护以下内容的访问来帮助支持用户隐私
- 受限数据,例如系统状态和用户的联系信息
- 受限操作,例如连接到配对设备和录制音频
此页面概述了 Android 权限的工作原理,包括使用权限的高级工作流程、不同类型权限的描述以及在应用中使用权限的一些最佳实践。其他页面解释了如何最大程度地减少应用对权限的请求、声明权限、请求运行时权限以及限制其他应用如何与您的应用组件进行交互。
要查看 Android 应用权限的完整列表,请访问权限 API 参考页面。
要查看一些演示权限工作流程的示例应用,请访问 GitHub 上的Android 权限示例存储库。
使用权限的工作流程
如果您的应用提供了可能需要访问受限数据或执行受限操作的功能,请确定您是否可以在无需声明权限的情况下获取信息或执行操作。您可以在应用中满足许多用例,例如拍照、暂停媒体播放和显示相关广告,而无需声明任何权限。
如果您确定您的应用必须访问受限数据或执行受限操作才能满足用例,请声明相应的权限。某些权限(称为安装时权限)在安装应用时会自动授予。其他权限(称为运行时权限)需要您的应用更进一步,并在运行时请求权限。
图 1 说明了使用应用权限的工作流程
权限类型
Android 将权限分类为不同的类型,包括安装时权限、运行时权限和特殊权限。每个权限的类型指示当系统授予您的应用该权限时,您的应用可以访问的受限数据的范围以及您的应用可以执行的受限操作的范围。每个权限的保护级别基于其类型,并在权限 API 参考页面上显示。
安装时权限
安装时权限允许您的应用有限地访问受限数据或让您的应用执行对系统或其他应用影响最小的受限操作。当您在应用中声明安装时权限时,应用商店会在用户查看应用的详细信息页面时向用户显示安装时权限通知,如图 2 所示。当用户安装您的应用时,系统会自动授予您的应用这些权限。
Android 包含安装时权限的几个子类型,包括普通权限和签名权限。
普通权限
这些权限允许访问超出应用沙箱范围的数据和操作,但对用户隐私和其他应用的操作几乎没有风险。
系统为普通权限分配normal
保护级别。
签名权限
只有当应用使用与定义权限的应用或操作系统相同的证书进行签名时,系统才会授予该应用签名权限。
实现特权服务(例如自动填充或 VPN 服务)的应用程序也会使用签名权限。这些应用需要服务绑定签名权限,以便只有系统才能绑定到这些服务。
系统将signature
保护级别分配给签名权限。
运行时权限
运行时权限,也称为危险权限,可以让您的应用额外访问受限数据,或执行会更大幅度影响系统和其它应用的受限操作。因此,在访问受限数据或执行受限操作之前,您需要在应用中请求运行时权限。不要假设这些权限之前已被授予,请在每次访问之前检查并根据需要请求权限。
当您的应用请求运行时权限时,系统会显示运行时权限提示,如图 3 所示。
许多运行时权限会访问私有用户数据,这是一种包含潜在敏感信息的特殊受限数据类型。私有用户数据示例包括位置和联系人信息。
麦克风和摄像头可以访问特别敏感的信息。因此,系统会帮助您解释您的应用为何访问这些信息。
系统将dangerous
保护级别分配给运行时权限。
特殊权限
特殊权限对应于特定的应用操作。只有平台和 OEM 才能定义特殊权限。此外,平台和 OEM 通常在想要保护对特定强大操作(例如在其他应用上绘制)的访问权限时定义特殊权限。
系统设置中的特殊应用访问页面包含一组用户可切换的操作。许多这些操作都是作为特殊权限实现的。
了解如何请求特殊权限的更多信息。
系统将appop
保护级别分配给特殊权限。
权限组
权限可以属于权限组。权限组由一组逻辑相关的权限组成。例如,发送和接收短信的权限可能属于同一组,因为它们都与应用与短信的交互有关。
权限组可以帮助系统最大程度地减少当应用请求紧密相关的权限时向用户显示的系统对话框数量。当用户收到提示以授予应用权限时,属于同一组的权限会在同一界面中显示。但是,权限可能会在未经通知的情况下更改组,因此不要假设特定权限与任何其他权限分组。
最佳实践
应用权限建立在系统安全功能的基础上,并帮助 Android 支持以下与用户隐私相关的目标
- 控制:用户可以控制他们与应用共享的数据。
- 透明度:用户了解应用使用哪些数据以及应用访问这些数据的原因。
- 数据最小化:应用仅访问和使用用户调用的特定任务或操作所需的数据。
本节介绍了一套在应用中有效使用权限的核心最佳实践。有关如何在 Android 上使用权限的更多详细信息,请访问应用权限最佳实践页面。
请求最少的权限
当用户在您的应用中请求特定操作时,您的应用应仅请求完成该操作所需的权限。根据您使用权限的方式,可能存在替代方法来满足您的应用用例,而无需依赖对敏感信息的访问。
将运行时权限与特定操作相关联
尽可能晚地在应用用例流程中请求权限。例如,如果您的应用允许用户向其他人发送音频消息,请等待用户导航到消息屏幕并按下发送音频消息按钮。在用户按下按钮后,您的应用就可以请求访问麦克风。
考虑您的应用依赖项
当您包含库时,您也会继承其权限要求。请注意每个依赖项需要哪些权限以及这些权限的用途。
保持透明
当您发出权限请求时,请清楚说明您要访问的内容、原因以及如果拒绝权限会受到哪些功能影响,以便用户能够做出明智的决定。
使系统访问明确
当您访问敏感数据或硬件(例如摄像头或麦克风)时,如果系统没有提供这些指示器,请在您的应用中提供持续的指示。此提醒可帮助用户准确了解您的应用何时访问受限数据或执行受限操作。
系统组件中的权限
权限不仅用于请求系统功能。您的应用的系统组件可以限制哪些其他应用可以与您的应用交互,如有关如何限制与其他应用的交互的页面所述。