Android权限:手机通话:读取手机状态和身份

我的Android应用程序与电话无关,但我看到,当我在我的testing设备上安装debugging版本,它需要“电话:读取手机状态和身份”权限。 (我在AndroidManifest.xml没有提到这一点)。

我想有最小的可能的权限,并想知道如果有人知道如何摆脱这一点? 我从Build.MODELBuild.VERSION.*等等那里logging了一些东西,我Build.MODEL了这一部分。我还Build.VERSION.*我正在检测横向/纵向定位的部分,认为这可能是“电话状态”。 但是,这些似乎都没有取消所需的许可。

我发现了这个错误报告: http : //code.google.com/p/android/issues/detail?id = 4101,但它标记为工作正常,并提供有关权限是否正确的说明。 这是别人的经验吗? (我不愿意发布到市场只是为了testing。)否则,有没有人知道是否有一个API,我可以避免调用,这将使它,所以我的应用程序不需要此权限?

谢谢!

(回答我自己的问题,以防其他人遇到这个问题,并search它。)

在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" /> 

就这些。

玩得开心,迈克

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

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

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

新的权限。 1.6程序必须显式地请求WRITE_EXTERNAL_STORAGE权限才能修改SD卡的内容,并且他们必须显式地请求READ_PHONE_STATE权限才能够获取电话状态信息。 面向早期版本的应用程序将始终隐式请求这些权限。

正如你所看到的,没有办法发布一个1.5或更低版本的应用程序,而不需要在运行1.6或更高版本的手机上请求这些权限。