如何为 Gingerbread 上运行的应用程序授予 MODIFY_PHONE_STATE 权限

2024-01-03

我编写了一个尝试修改电话状态的应用程序。它在 Android 2.2 或更低版本上运行良好,但在 Android 2.3 上会抛出异常,因为缺少 android.permission.MODIFY_PHONE_STATE 权限(我在 AndroidManifest.xml 上声明了此权限)。任何想法?下面是异常日志:

01-15 09:14:23.210: ERROR/AndroidRuntime(404): FATAL EXCEPTION: main
01-15 09:14:23.210: ERROR/AndroidRuntime(404): java.lang.RuntimeException: Unable to start receiver test.PhoneReceiver: java.lang.SecurityException: Neither user 10031 nor current process has android.permission.MODIFY_PHONE_STATE.
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:1780)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at android.app.ActivityThread.access$2400(ActivityThread.java:117)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:978)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at android.os.Looper.loop(Looper.java:123)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at java.lang.reflect.Method.invokeNative(Native Method)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at java.lang.reflect.Method.invoke(Method.java:507)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-15 09:14:23.210: ERROR/AndroidRuntime(404):     at dalvik.system.NativeStart.main(Native Method)

您遇到的问题是在 Android 2.3 (Gingerbread) 中引入的。您拥有的任何需要 MODIFY_PHONE_STATE 的代码都可以一直工作到(并包括)Android 2.2,但对于 Android 2.3+ 将会中断。

A 更改已签入 https://android.googlesource.com/platform/frameworks/base/+/f4ece2086f3b7060edc4b93a12f04c9af648867a由 David Brown 提出,限制对系统应用程序使用 MODIFY_PHONE_STATE 权限。系统应用程序是

  1. 预安装到 ROM 上的系统文件夹中
  2. 由制造商使用其安全证书编译

我怀疑您正在尝试使用像 ITelephony 这样的隐藏 API。我是——而且我被这种变化所困扰。 Android 团队的理由是,它是一个隐藏的 API,您一开始就不应该使用它。

也就是说,有增强请求 http://code.google.com/p/android/issues/detail?id=15031开放创建一个适当的公共电话API,但谷歌取消了票。他们的立场似乎是他们不打算改变方向,并且这些 API 不供公众使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Gingerbread 上运行的应用程序授予 MODIFY_PHONE_STATE 权限 的相关文章

随机推荐