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

Mik*_*ale 69 android

我的Android应用程序与电话无关,但我看到当我在我的测试设备上安装调试版本时,它需要"电话呼叫:读取电话状态和身份"权限.(我没有提到这一点AndroidManifest.xml).

我想拥有最低限度的权限,并想知道是否有人知道如何摆脱这个?我注释掉了,我是从记录一些东西的一部分Build.MODEL,Build.VERSION.*等我也注释掉我在那里检测横向/纵向方向想,这可能是"手机状态"的部分.但这些似乎都没有删除所需的许可.

我发现了这个错误报告:http://code.google.com/p/android/issues/detail?id = 4101, 但它标记为工作原样,并附有关于权限从市场上正确但不是正确的说明.这是其他人的经历吗?(我不想只是为了测试它而向市场发布.)否则,是否有人知道是否有一个API我可以避免调用它会使我的应用程序不需要此权限?

谢谢!

Mik*_*ale 89

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

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

android.permission.WRITE_EXTERNAL_STORAGE and 
android.permission.READ_PHONE_STATE
Run Code Online (Sandbox Code Playgroud)

任何声明targetSdk版本小于4(donut)的应用程序.必须存在兼容性原因,也许针对旧版本的应用可能会假设他们拥有这些权限而无需明确声明这些权限.因此,如果您不希望隐式将这些权限添加到您的应用中,请在AndroidManifest.xml中添加如下所示的部分

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />
Run Code Online (Sandbox Code Playgroud)

就这些.

玩得开心,-Mike


Mar*_*k B 24

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

WRITE_EXTERNAL_STORAGE:允许应用程序写入外部存储.使用API​​ Level 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或更早版本的应用而无需请求这些权限.