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

Phone calls
   read phone state and identity


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



评论

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

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

#1 楼

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

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

评论


看到有关获取电话唯一ID的问题,这似乎是开发人员从电话中获取唯一ID的(当前)最可靠的方法,需要“读取电话状态”权限stackoverflow.com/questions/2785485/…

–GAThrawn
2011年3月7日15:08



#2 楼

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

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

评论


SD卡访问也是如此。

–丹尼斯·尼古拉连科
11年7月28日在19:55

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

– Izzy♦
2014年2月7日在21:18

#3 楼

原因是Android 1.5和更低版本不需要应用程序专门请求这些权限并自动授予它们。从Android 1.6开始,这些权限必须由应用明确要求。但是,如果您指定您的应用程序可以在Android 1.5及更低版本的设备上运行,则默认情况下该权限会添加到该应用程序,并且市场会显示该权限是应用程序所要求的。总而言之,该应用程序可能实际上未在访问您的“电话状态和身份”,但是如果开发人员指定他/她的应用程序可以在1.5或更低版本的设备上运行,则将显示该权限。

评论


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

–GAThrawn
2010年12月5日13:00

@GAThrawn:请参阅groups.google.com/group/android-developers/browse_thread/thread/…和code.google.com/p/android/issues/detail?id=4101

–贾斯汀·路德维希(Justin Ludwig)
2011年1月3日,下午4:55

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

– Stewart
13年8月31日在16:20

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

– Izzy♦
2014年2月7日在21:20

#4 楼

这个问题困扰了我一段时间。所以现在,终于,我决定深入研究问题了。
Playstore有一个名为permission.READ_PHONE_STATE的应用,该应用要求READ_PHONE_STATE是唯一的许可,除了打印出它可以访问的所有数据外,别无其他使用或不使用它。我已经将其安装在我的LG Optimus 4X上,该版本植根于股票Android 4.0.3,并使用LBE撤消了许可。结果非常有趣,如以下屏幕快照所示:
应用权限收集的信息。READ_PHONE_STATE(单击图像可获得较大的变体)未经许可,可以自由访问:我的邮箱号码(备注:是的,这是正确的;从您自己的设备拨号时,使用我的提供者是快捷方式,因此我可以自由显示它;)在第一个屏幕截图的结尾请参阅:


CALL_STATE_IDLE。因此,不会有电话传入,传出或进行中。没有应用程序需要此权限才能在传入呼叫中使其自身成为“后台”。通知栏),您所在的国家/地区,您的提供商(包括他的一些技术数据),您是否拥有SIM卡或正在漫游。
因此,唯一无法访问的是识别数据:IMEI,SIMID,IMSI和您自己的电话号码。
对于广告模块,最有可能是1

,因为开发人员认为他需要它(如此处的一些答案所指出)2

因为有问题的应用是旨在(也)可以在Android 1.5及更低版本上运行(很容易找到,就像在Google Play上列出的那样)。1 Dan在聊天中的帖子中的注释:

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

为了让用户知道应用程序使用IMEI的用途,您应该先要求开发人员进行解释。

2另一个开发人员只是向我指出了一个细微的区别:虽然不需要阅读权限当前的通话状态(如我所指出的),可能需要注册一个侦听器,以便在通话状态发生变化时得到通知(请参阅:在Android上检测传入和传出的电话)。尽管在系统调用DATA_DISCONNECTED时似乎可以自动处理此问题,但这可能并不总是适用:想想您的闹钟。您可能不想让它在来电时自动停止-尤其是当您的个人资料设置为铃声音量“静音”时。

3 Dan的一个更正:您仅获得默认的额外权限如果您应用的“目标”版本为1.5。如果目标是更高版本,但最低版本是1.5,则不会自动添加权限。

更新

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


评论


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

– Mikel
2014年5月18日在17:33

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

– Izzy♦
2014年5月18日17:53

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

– Mikel
14年5月18日在18:02



@Mikel看到我的更新。是的,“一点都不需要”可能有点夸张。也许在所有当前请求的0.5%中,确实确实需要它,没有可用的替代方法#D再一次是:onPause()是我们在聊天中讨论的内容!但是,使用onAudioFocusChange()甚至可能会减少开销(那么小的轮询可能就可以忽略了)。

– Izzy♦
14年5月18日在18:06



#5 楼

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

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

评论


恕我直言,这是所有背后的主要问题!好想。

– Izzy♦
2014年2月7日在21:21