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