Android NDK开发详解权限之Android 中的权限


应用权限有助于保护对以下数据和操作的访问/执行权限,从而为保护用户隐私提供支持:

受限数据,例如系统状态和用户的联系信息
受限操作,例如连接到已配对的设备并录制音频
本页将概要介绍 Android 权限的工作原理,包括使用权限的概要工作流、对不同类型权限的说明,以及在应用中使用权限的一些最佳实践。其他页面将介绍如何最大限度减少应用的权限请求、声明权限、请求运行时权限,以及限制其他应用与应用组件交互的方式。

如需查看 Android 应用权限的完整列表,请访问权限 API 参考文档页面。

如需查看演示权限工作流的一些示例应用,请访问 GitHub 上的 Android 权限示例仓库。

使用权限的工作流

如果您的应用提供的功能可能需要访问受限数据或执行受限操作,请确定您是否无需声明权限即可获取相关信息或执行相关操作。您可以在您的应用中实现很多用例(例如拍照、暂停媒体播放和展示相关广告),而无需声明任何权限。

如果您确定您的应用必须访问受限数据或执行受限操作才能实现某个用例,请声明相应的权限。有些权限是用户安装应用时自动授予的权限,称为安装时权限。其他权限则需要应用在运行时进一步请求权限,此类权限称为运行时权限。

图 1 显示了使用应用权限的工作流:
在这里插入图片描述

图 1. 在 Android 中使用权限的概要工作流。

权限类型

Android 将权限分为不同的类型,包括安装时权限、运行时权限和特殊权限。每种权限类型都指明了当系统授予应用该权限后,应用可以访问的受限数据范围以及应用可以执行的受限操作范围。每项权限的保护级别取决于其类型,显示在权限 API 参考文档页面上。

安装时权限

左图所示为某个应用的安装时权限列表。右图显示了一个弹出式对话框,其中包含 2 个选项:允许和拒绝。
图 2. 某应用商店中显示的某个应用的安装时权限列表。
在这里插入图片描述

系统会为一般权限分配 normal 保护级别。

签名权限
只有当应用与定义权限的应用或 OS 使用相同的证书签名时,系统才会向应用授予签名权限。

实现特权服务(如自动填充或 VPN 服务)的应用也会使用签名权限。这些应用需要服务绑定签名权限,以便只有系统可以绑定到服务。

注意:有些签名权限不适合第三方应用使用。
系统会为签名权限分配 signature 保护级别。

运行时权限

一个弹出式对话框,其中包含 2 个选项:允许和拒绝。
图 3. 当应用请求运行时权限时显示的系统权限提示。
在这里插入图片描述

系统会为运行时权限分配 dangerous 保护级别。

特殊权限

特殊权限与特定的应用操作相对应。只有平台和原始设备制造商 (OEM) 可以定义特殊权限。此外,如果平台和 OEM 想要防止有人执行功能特别强大的操作(例如通过其他应用绘图),通常会定义特殊权限。

系统设置中的特殊应用访问权限页面包含一组用户可切换的操作。其中的许多操作都是以特殊权限的形式实现的。

详细了解如何请求特殊权限。

系统会为特殊权限分配 appop 保护级别。

权限组

权限可以属于权限组。 权限组由一组逻辑相关的权限组成。例如,发送和接收短信的权限可能属于同一组,因为它们都涉及应用与短信的互动。

权限组的作用是在应用请求密切相关的多个权限时,帮助系统尽可能减少向用户显示的系统对话框数量。当系统提示用户授予应用权限时,属于同一组的权限会在同一个界面中显示。 但是,权限可能会在不另行通知的情况下更改组,因此不要假定特定权限与任何其他权限组合在一起。

最佳实践

应用权限基于系统安全功能,并且有助于 Android 支持与用户隐私相关的以下目标:

控制:用户可以控制他们与应用分享的数据。
透明度:用户了解应用使用了哪些数据以及应用为何访问相关数据。
数据最小化:应用仅访问和使用用户调用的特定任务或操作所需的数据。
本部分将介绍一组在应用中有效使用权限的核心最佳实践。如需详细了解如何在 Android 中使用权限,请访问应用权限最佳实践页面。

请求最少数量的权限

当用户在应用中请求执行特定操作时,应用应当只请求完成该操作所需的权限。根据您使用权限的方式,您可以通过其他方式实现应用的用例,而无需依赖于访问敏感信息。

将运行时权限与特定操作相关联

尽可能往后推迟到在应用的用例流程中请求权限。例如,如果应用允许用户向他人发送语音消息,请等到用户已导航到消息屏幕并已按下发送语音消息按钮后再请求权限。待用户按下该按钮后,应用再请求麦克风使用权限。

考虑应用的依赖项

添加某个库时,您也会继承它的权限要求。请注意每个依赖项所需的权限以及这些权限的用途。

公开透明

请求权限时,请清晰说明您要访问的内容、访问原因以及权限遭拒时哪些功能会受到影响,以便用户可以做出明智的决策。

以显式方式访问系统

当您访问敏感数据或硬件(例如摄像头或麦克风)时,如果系统尚未提供这些指示标志,请在应用中持续提供指示。此提醒可帮助用户确切了解应用何时会访问受限数据或执行受限操作。

系统组件中的权限

权限不仅仅用于请求系统功能。应用的系统组件可以限制哪些其他应用可以与您的应用交互,如介绍如何限制与其他应用的交互的页面中所述。

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2023-05-29。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值