我的Android应用程序与电话无关,但我看到当我在我的测试设备上安装调试版本时,它需要“电话呼叫:读取电话状态和身份”权限。 (我在AndroidManifest.xml
)中没有提到这一点。
我想拥有最低限度的权限,并想知道是否有人知道如何摆脱这个?我评论了我从Build.MODEL
,Build.VERSION.*
等处记录一些内容的部分。我还评论了我检测景观/纵向方向的部分,认为可能是“手机状态” ”。但这些似乎都没有删除所需的许可。
我发现了这个错误报告:http://code.google.com/p/android/issues/detail?id=4101但是它标记为按预期工作,并附有关于权限从市场上正确但不是正确的说明。这是其他人的经历吗? (我不想发布到市场只是为了测试它。)否则,有没有人知道是否有一个API,我可以避免调用,这将使我的应用程序不需要此权限?
谢谢!
答案 0 :(得分:89)
(回答我自己的问题,以防其他人遇到此问题并进行搜索。)
在android源代码中的PackageParser.java中挖掘,我发现系统会自动分配
android.permission.WRITE_EXTERNAL_STORAGE and
android.permission.READ_PHONE_STATE
声明targetSdk版本低于4(donut)的任何应用程序。必须存在兼容性原因,也许针对旧版本的应用可能会假设他们拥有这些权限而无需明确声明这些权限。因此,如果您不希望隐式将这些权限添加到您的应用中,请在AndroidManifest.xml中添加如下所示的部分
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="4" />
就是这样。
玩得开心,-Mike
答案 1 :(得分: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或更早版本的应用而无需请求这些权限。