为什么这么多应用程序需要读取电话状态和身份的权限?


88

为什么这么多应用程序需要读取电话状态和身份的权限?特别:

Phone calls
   read phone state and identity

例如,Quickpedia是Wikipedia门户,但希望访问电话。这有什么解释?

在此处输入图片说明


事实并非如此,因为“是的,这个应用程序具有发送短信并在您的背后打个电话的权限”,这就是人们的假设。@克里斯蒂安下面的答案已经击中了头!在许多情况下,这是合法的,并且开发人员往往会忘记放弃权限(也许是从应用程序开发初期开始的保留)。
t0mm13b 2012年

1
@ t0mm13b我认为除了技术人员和隐私极客(包括自已)以外,对于减少权限的需求并不多。因此,如果应用程序制造商只是要求完全权限的规范,那么消费者将认为任何应用程序都可以拥有很多权限。政府没有向他们施加压力,要求他们使用最低权限,到目前为止,市场没有向他们施加压力。也就是说,应用程序需要大量权限几乎没有成本。
user29020 2015年

Answers:


59

它允许该应用读取与您的手机关联的唯一ID(名为IMEI的手机标识符)。

因此,它可以帮助进行复制保护或尝试跟踪用户数量。


3
见买一台手机的唯一ID这太问题,看起来像一个开发商从拿到手机的唯一ID(当前)最可靠的方法需要读取手机状态权限stackoverflow.com/questions/2785485/...
GAThrawn

40

除了唯一ID,还有另一个原因。我猜想一半的应用程序根本不会访问这些值。问题是对于不超过Android 1.5的较低版本,此权限不存在。每个人都可以访问这些值而无需任何请求。

因此,如果您创建与1.5兼容的应用,则会自动添加此权限以模拟Android 1.5的较低安全性,因为在大多数情况下,您可能会忽略此权限,因为它往往只是兼容性问题。


2
SD卡访问也是如此。
丹尼斯·尼古拉

1
没错-但这并不能解释为什么2.x及更高版本的应用如此频繁地想要它。
伊兹

19

原因是Android 1.5及更低版本不需要应用程序专门请求这些权限并自动授予它们。从Android 1.6开始,这些权限必须由应用明确要求。但是,如果您指定您的应用程序可以在Android 1.5及更低版本的设备上运行,则默认情况下该权限会添加到该应用程序,并且市场会显示该权限是应用程序所要求的。

因此,总而言之,该应用程序可能实际上未在访问您的“电话状态和身份”,但是如果开发人员指定他/她的应用程序可以在1.5或更低版本的设备上运行,则会显示该权限。


您是否有任何指向显示此内容的文档的链接?
GAThrawn 2010年


developer.android.com/reference/android/os/…提供了目标版本标识符的完整列表,以及它们之间的权限更改(包括其他差异)。
斯图尔特

对。但是可能不再“有趣”了,因为1.5及以下版本的应用程序非常少见:)
Izzy

18

这个问题困扰了我一段时间。所以现在,终于,我决定深入探讨问题。

Playstore有一个名为Permission.READ_PHONE_STATE的应用程序,该应用程序请求READ_PHONE_STATE作为唯一权限,除了打印出可以使用或不使用它而可以访问的所有数据外,别无其他。我已将其安装在LG Optimus 4X上,并以股票Android 4.0.3为基础,并使用LBE撤消了许可。结果非常有趣,如以下屏幕截图所示:

屏幕截图1 屏幕截图2 屏幕截图3
应用权限收集的信息。READ_PHONE_STATE (点击图片可查看较大版本)

如您所见,即使未经授权也无法访问开发人员的某些信息,也可以自由访问:我的邮箱号码(注:是的,这是正确的;使用提供程序是从您自己的设备拨号时的快捷方式,因此我可以自由显示它;)在第一个屏幕截图的结尾,您将看到:

  • CALL_STATE_IDLE因此,不会有电话传入,传出或进行中。没有应用程序需要此权限才能在传入呼叫中使其自身“后台”。

甚至有可能查看移动数据是否处于活动状态(DATA_DISCONNECTED;在截屏时我在WiFi上,如您在通知栏中看到的那样),您所在的国家,您的提供商(包括有关他的一些技术数据),您正在使用SIM卡,或者正在漫游。

因此,唯一无法访问的是标识数据:IMEI,SIMID,IMSI和您自己的电话号码。

结论:仅出于标识目的,才需要此权限,而仅此而已。

那么为什么这么多应用程序需要它?

  • 对于广告模块,很可能1
  • 因为开发人员认为他需要它(如此处的一些答案所指出)2
  • 由于该应用旨在(也)可以在Android 1.5及更低版本的Android上运行(易于查找,如Google Play所示)。

恕我直言,按照这种顺序的可能性。


1注由丹对聊天后

现在,Google Play政策禁止应用出于广告目的而让您的IMEI识别您的身份。现在,所有广告库都已更新,可以使用Google Play服务提供的“广告ID”,因此任何仍使用IMEI的广告库都应报告给Google。

由于用户很难知道应用程序将IMEI用于什么用途,因此您应该先要求开发人员进行解释。


2另一名开发者只是向我指出一个微妙的差异:一会儿是不需要的权限读取当前呼叫状态(正如我指出的),它可能需要注册一个监听器,以便被通知改变通话状态(请参阅:在Android上检测来电和去电)。尽管似乎有一些方法可以在系统调用时自动处理此问题onPause,但这可能并不总是适用:请考虑一下您的闹钟。您可能不想让它在来电时自动停止 -尤其是当您的个人资料设置为铃声音量“静音”时。


3再次修正Dan如果应用程序的“目标”版本为1.5,则仅获得默认的额外权限。如果您以更高版本为目标,但最小版本为1.5,则不会自动添加权限。


更新

  1. 有趣的是,存在一个未解决的问题(21504)来划分READ_PHONE_STATE需要进行以下操作的内容:a)检测传入呼叫和相关呼叫(电话),以及第二次获得身份验证详细信息(IMEI,IMSI等)的权限。打开11/2011,仍然没有工作。给它加星标:)
  2. 是的,有一种方法可以在未经许可的情况下实现相同的功能(检测传入呼叫)READ_PHONE_STATE,例如Arno Welzel指出的那样。由于来电会触发铃声,因此事件可以与配合使用onAudioFocusChange(),不需要任何特殊权限:如果触发该事件,则该应用可以检查CallState(同样,无需任何特殊许可)以查看是否存在来电。

我认为您需要删除您说没有应用需要此权限作为来电背景的部分。您已经在脚注2中指出了这一点,但这是矛盾的。另见developer.android.com/reference/android/telephony/...
米克尔-

@Mikel你是对的。使用此权限是完成任务的“最简单”方法,但这不是唯一的方法。正如一些开发人员所指出的那样,可以不做任何事情(是在聊天中吗?不幸的是,我丢失了链接)。与许多事情一样,使用Google的API使某些事情更容易实现(同时还将您的应用程序绑定到Google生态系统)。我不是开发人员,所以我无法说出另一种方法意味着还有多少工作要做。
伊兹

我也不是Android开发人员,我同意听起来像onPause()涵盖了一些用例。只是说“没有应用程序需要此许可”对我来说是错误的。听起来更像是“某些应用可能需要此权限”,例如,如果它们在后台运行。还要注意,接收广播的意图肯定比重复轮询电话状态要有效。
Mikel

@Mikel看到我的更新。是的,“一点都不需要”可能有点夸张。也许在所有当前请求的0.5%中,确实确实需要它,没有可用的替代方法#D再一次,onPause()是的,这是我们在聊天中讨论的内容!但是onAudioFocusChange()即使使用,开销也可能更少(然后很少的轮询可能是可忽略的)。
伊兹

10

许多广告发布商都使用此权限来获取电话ID,以用于各种跟踪目的。还有其他获取唯一ID的方法,但不幸的是,它们在较旧的Android版本中存在错误(故事更复杂,请参见例如https://stackoverflow.com/questions/2785485/is-there-a-unique-android- device-idhttp://android-developers.blogspot.com/2011/03/identifying-app-installations.html以获得更完整的故事)。

因此,如果应用程序使用广告,则很有可能该应用程序本身实际上不需要READ_PHONE_STATE权限,只有广告提供者需要。


1
这是恕我直言,这一切的背后主要的问题!好想。
伊齐
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.