Android权限:电话:读取电话状态和身份


70

我的android应用程序与电话无关,但是我看到在测试设备上安装调试版本时需要“电话:读取电话状态和身份”权限。(我在中没有提及AndroidManifest.xml)。

我想拥有最低限度的权限,想知道是否有人知道如何摆脱这种情况?我注释掉了我从Build.MODELBuild.VERSION.*等处记录某些内容的部分。我注释掉了我在检测横向/人像方向的那部分,并认为这可能是“电话状态”。但是这些似乎都没有删除所需的许可。

我发现了以下错误报告:http : //code.google.com/p/android/issues/detail?id=4101, 但该标签已按预期方式进行了标记,并标有关于市场上正确的权限说明,但并非如此。这是别人的经历吗?(我不想只发布到市场上进行测试。)否则,是否有人知道是否存在可以避免调用的API,因此我的应用不需要此许可?

谢谢!

Answers:


90

(回答我自己的问题,以防其他人遇到此问题并进行搜索。)

在android源码中的PackageParser.java中,我发现系统会自动分配

android.permission.WRITE_EXTERNAL_STORAGE and 
android.permission.READ_PHONE_STATE

声明targetSdk版本小于4(甜甜圈)的任何应用程序。为此必须有一个兼容性原因,也许针对较早版本的应用程序可以假定它们具有这些权限,而无需明确声明它们。因此,如果您不想将这些权限隐式添加到您的应用中,请在AndroidManifest.xml中添加类似以下内容的部分

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />

就这些。

玩得开心-麦克


因此,在1.5及更低版本中,您说的是默认情况下分配了这些权限,并且没有缓解它的方法吗?
MattC

那就是我的样子。否则,我不知道为什么会这样隐式授予他们。我想进行一次测试,我们可以尝试在1.5个模拟器/设备上运行1.5个应用程序,而不设置任何使用权限,并查看是否有可能(例如)写入sdcard。(这在1.6仿真器/设备上确实有效,但仅由于隐式添加的权限而已。将targetSdkVersion设置为4将迫使您在写入sdcard之前也添加使用权限。)
Mike Kale,2009年

1
android:minSdkVersion是14,但READ_PHONE_STATE被隐式授予。我正在使用Facebook SDK和GoogleMaps v2,这些库是否可能负责隐式权限请求?
wkarl 2015年

24

Android 1.6更新日志:http : //developer.android.com/sdk/android-1.6.html#api

WRITE_EXTERNAL_STORAGE:允许应用程序写入外部存储。使用API​​级别3和更低版本的应用程序将被隐式授予此权限(并且这对于用户是可见的);使用API​​级别4或更高级别的应用程序必须明确请求此权限。

但这只是其中之一。由于某种原因,正式变更日志缺少有关READ_PHONE_STATE的信息。完整的故事在这里清除:http : //blogs.zdnet.com/Burnette/?p=1369&page=3

新权限。1.6程序必须显式请求 WRITE_EXTERNAL_STORAGE权限才能修改SD卡的内容,并且它们必须显式请求READ_PHONE_STATE 权限才能够检索电话状态信息。定位到较早版本的应用将始终隐式请求这些权限。

因此,如您所见,当安装在运行1.6或更高版本的手机上时,如果没有请求这些权限,就无法发布针对1.5或更早版本的应用。

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.