跳转到相应内容

最常访问

最近访问

navigation

权限和用户数据

权限可以保护设备中的敏感信息,并且仅应在应用为正常行使功能而必须访问这些信息时使用。

本文档概述了 Android 中权限的作用方式,以便您能对请求权限做出更明智的决定。本文档中的信息不针对特定使用场景,且没有对底层代码展开复杂、详细的讨论。

如需了解有关如何管理权限的特定建议,请参阅应用权限最佳做法。有关在 Android 上使用唯一标识符的最佳做法,请参阅唯一标识符最佳做法。如需了解有关如何在您的代码中使用权限的详情,请参阅使用系统权限

简介

每款 Android 应用都必须有一个清单文件,此文件可以向 Android 系统提供有关应用的关键信息。Android 系统还要求应用在访问敏感的设备或用户信息时请求权限,并且这些请求必须事先记录在应用的清单中。此外,对敏感信息的访问会影响用户行为,因此,应仅出于应用正常工作所需这一目的请求权限。

权限组

Android 中的权限以 permission groups 的形式来组织和划分与设备功能或特性相关的权限。在这一体系中,权限请求在组级别进行处理,一个权限组对应于应用清单中的多个权限声明;例如,SMS 组同时包括 READ_SMSRECEIVE_SMS 声明。

这种安排对用户而言更为简单和清晰;应用一旦获得组的访问权限,它就可以使用该组中的 API 调用,而不再对启用了自动更新的用户提出权限要求,因为他们已经授予组的访问权限。通过这种方式,组权限让用户能做出更有意义和明智的选择,而不会对复杂和技术性权限请求感到无所适从。

这也意味着您请求访问特定 API 调用或查询基于某项权限的内容提供程序时,系统将向用户显示针对整个组而非某一特定 API 调用的权限授予请求。例如,如果您请求 WRITE_CALL_LOG 权限,系统将要求用户授予 PHONE 组的访问权限(API 级别 23 和更高级别),此组由 READ_PHONE_STATECALL_PHONEREAD_CALL_LOGWRITE_CALL_LOGADD_VOICEMAILUSE_SIPPROCESS_OUTGOING_CALLS 权限及其关联方法构成。

权限分组的一个结果是应用中的一个 API 调用会导致应用请求权限的数量产生倍数效应。

  1. API 调用 →
  2. 触发特定权限组访问请求 →
  3. 成功的请求可以访问组中的所有权限(如果已启用自动更新)→
  4. 每项权限都可以访问该权限下的所有 API

举另一个例子,假设您的应用使用一个或多个 TelephonyManager 方法,例如:

TelephonyManager.getDeviceId()
TelephonyManager.getSubscriberId()
TelephonyManager.getSimSerialNumber()
TelephonyManager.getLine1Number()
TelephonyManager.getVoiceMailNumber()

要使用这些方法,必须在应用的清单中声明 READ_PHONE_STATE 权限,并且向用户显示关联的 PHONE 权限组。其重要性在于系统将要求用户授予相关组以及所有相关权限和 API 调用的访问权限,而不是所请求特定 API 调用的访问权限。

如需了解权限及其相关权限组之间的完整对应关系,请参阅下面对应于特定版本的文档:

权限请求和应用下载

我目前在 Android 中使用 READ_PHONE_STATE 权限在收到来电时暂停媒体播放器,并在来电结束时恢复播放。权限似乎让很多人感到恐惧...1

调查发现,对于各方面类似(例如功能、品牌认知)的应用而言,请求的权限数量越少,下载量越大。一些公开的资源根据应用使用的权限对应用进行分级,并允许用户按照评分来比较应用;此类分级面向当今的许多 Android 应用,而用户也对这些评级较为关注。

在一项研究2中,用户面对两个无标识的应用,它们具有相近的评分,提供的功能也相同,但权限请求集不同。结果,权限请求较少的应用的安装人数比另一款应用的安装人数高三倍。另一项类似的研究 3 则表明,用户选择权限请求较少的应用几率比选择请求较多者的几率高 1.7 倍。

最后,Play 商店中同类应用要求使用的权限数量分布并不均匀。例如,Play 商店中有 39.3% 的街机游戏应用不向用户显示权限请求,而只有 1.5% 的街机游戏应用请求 Phone 权限组(参见图 1)。

图 1. 街机游戏类权限组使用分布

将您的应用与其他类似应用比较后,用户可能会认为您的应用提出过多的权限请求 - 在本例中,街机游戏应用如果请求 Phone 应用组即会出现这种情况。因此,他们可能会安装该类别中没有提出这些请求的应用。4

权限请求呈下降趋势

在最近一段时间内对 Play 商店应用开展的一项分析发现,许多开发者在首次发布应用后减少了请求的权限数,这表明他们可能开始对权限组的声明持更慎重的态度。

图 2. 开发者对常见权限的使用逐渐减少。

图 2 显示了这种趋势。对 Play 商店中的开发者应用来说,请求三种最常见权限(READ_PHONE_STATEACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION)之一的应用的平均百分比呈稳定下降态势。这些结果表明,开发者在逐渐减少其应用请求的权限数,以响应用户的行为模式。

结论就是,在为用户提供相同功能的情况下,对敏感信息提出越少请求,应用的下载量就越大。如需了解有关如何实现这一目标的具体建议,请参阅应用权限最佳做法

参考

[1] StackOverflow 上的开发者言论。来源

[2] Using Personal Examples to Improve Risk Communication for Security and Privacy Decisions,作者:M. Harbach、M. Hettig、S. Weber 和 M. Smith。ACM CHI 2014 会议记录。

[3] Modeling Users’ Mobile App Privacy Preferences:Restoring Usability in a Sea of Permission Settings,作者:J. Lin B. Liu、N. Sadeh 和 J. Hong。SOUPS 2014 会议记录。

[4] Teens and Mobile Apps Privacy(来源

此网站会使用 Cookie 来存储您在此网站上指定的语言和显示选项偏好设置。

获取最新的 Android Developers 资讯和提示,助您在 Google Play 上取得成功。

* 必填字段

成功!

在微信上关注 Google Developers

要以浏览此网站吗?

您请求访问的是网页,但是您为此网站设置的语言偏好为

要更改您的语言偏好设置并以浏览此网站吗?如果以后您想要更改语言偏好设置,请使用每个页面底部的语言菜单。

该类需要 或更高的 API 级别

此文档已被隐藏,因为您为该文档选择的 API 级别是 。您可以使用左侧导航栏上方的选择器来更改文档的 API 级别。

要详细了解如何根据您的应用需求指定 API 级别,请参阅支持不同平台版本

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)