为什么这么多应用程序需要读取电话状态和身份的权限?特别:
Phone calls
read phone state and identity
例如,Quickpedia是Wikipedia门户,但希望访问电话。这有什么解释?
为什么这么多应用程序需要读取电话状态和身份的权限?特别:
Phone calls
read phone state and identity
例如,Quickpedia是Wikipedia门户,但希望访问电话。这有什么解释?
Answers:
它允许该应用读取与您的手机关联的唯一ID(名为IMEI的手机标识符)。
因此,它可以帮助进行复制保护或尝试跟踪用户数量。
原因是Android 1.5及更低版本不需要应用程序专门请求这些权限并自动授予它们。从Android 1.6开始,这些权限必须由应用明确要求。但是,如果您指定您的应用程序可以在Android 1.5及更低版本的设备上运行,则默认情况下该权限会添加到该应用程序,并且市场会显示该权限是应用程序所要求的。
因此,总而言之,该应用程序可能实际上未在访问您的“电话状态和身份”,但是如果开发人员指定他/她的应用程序可以在1.5或更低版本的设备上运行,则会显示该权限。
这个问题困扰了我一段时间。所以现在,终于,我决定深入探讨问题。
Playstore有一个名为Permission.READ_PHONE_STATE的应用程序,该应用程序请求READ_PHONE_STATE
作为唯一权限,除了打印出可以使用或不使用它而可以访问的所有数据外,别无其他。我已将其安装在LG Optimus 4X上,并以股票Android 4.0.3为基础,并使用LBE撤消了许可。结果非常有趣,如以下屏幕截图所示:
应用权限收集的信息。READ_PHONE_STATE (点击图片可查看较大版本)
如您所见,即使未经授权也无法访问开发人员的某些信息,也可以自由访问:我的邮箱号码(注:是的,这是正确的;使用提供程序是从您自己的设备拨号时的快捷方式,因此我可以自由显示它;)在第一个屏幕截图的结尾,您将看到:
CALL_STATE_IDLE
。因此,不会有电话传入,传出或进行中。没有应用程序需要此权限才能在传入呼叫中使其自身“后台”。甚至有可能查看移动数据是否处于活动状态(DATA_DISCONNECTED
;在截屏时我在WiFi上,如您在通知栏中看到的那样),您所在的国家,您的提供商(包括有关他的一些技术数据),您正在使用SIM卡,或者正在漫游。
因此,唯一无法访问的是标识数据:IMEI,SIMID,IMSI和您自己的电话号码。
结论:仅出于标识目的,才需要此权限,而仅此而已。
那么为什么这么多应用程序需要它?
恕我直言,按照这种顺序的可能性。
1注由丹对聊天后:
现在,Google Play政策禁止应用出于广告目的而让您的IMEI识别您的身份。现在,所有广告库都已更新,可以使用Google Play服务提供的“广告ID”,因此任何仍使用IMEI的广告库都应报告给Google。
由于用户很难知道应用程序将IMEI用于什么用途,因此您应该先要求开发人员进行解释。
2另一名开发者只是向我指出一个微妙的差异:一会儿是不需要的权限读取当前呼叫状态(正如我指出的),它可能需要注册一个监听器,以便被通知上改变通话状态(请参阅:在Android上检测来电和去电)。尽管似乎有一些方法可以在系统调用时自动处理此问题onPause
,但这可能并不总是适用:请考虑一下您的闹钟。您可能不想让它在来电时自动停止 -尤其是当您的个人资料设置为铃声音量“静音”时。
3再次修正Dan:如果应用程序的“目标”版本为1.5,则仅获得默认的额外权限。如果您以更高版本为目标,但最小版本为1.5,则不会自动添加权限。
READ_PHONE_STATE
需要进行以下操作的内容:a)检测传入呼叫和相关呼叫(电话),以及第二次获得身份验证详细信息(IMEI,IMSI等)的权限。打开11/2011,仍然没有工作。给它加星标:)READ_PHONE_STATE
,例如Arno Welzel指出的那样。由于来电会触发铃声,因此该事件可以与配合使用onAudioFocusChange()
,不需要任何特殊权限:如果触发该事件,则该应用可以检查CallState(同样,无需任何特殊许可)以查看是否存在来电。onPause()
是的,这是我们在聊天中讨论的内容!但是onAudioFocusChange()
即使使用,开销也可能更少(然后很少的轮询可能是可忽略的)。
许多广告发布商都使用此权限来获取电话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权限,只有广告提供者需要。