Skip to content

Most visited

Recently visited

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(来源

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)