如何授予MODIFY_PHONE_STATE权限的应用程序运行在姜饼姜饼、应用程序、权限、MODIFY_PHONE_STATE

2023-09-11 10:58:08 作者:想了太多心会痛

我写试图修改手机通话状态的应用程序。它的工作原理以及在Android 2.2或更低,但在Android 2.3抛出,因为缺乏对android.permission.MODIFY_PHONE_STATE许可权限的一个例外(我宣布的Andr​​oidManifest.xml此权限)。任何想法?下面是异常日志:

  9月一号至15号:14:23.210:ERROR / AndroidRuntime(404):致命异常:主要
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):java.lang.RuntimeException的:无法启动接收器test.PhoneReceiver:java.lang.SecurityException异常:无论用户10031也不是当前进程android.permission.MODIFY_PHONE_STATE。
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在android.app.ActivityThread.handleReceiver(ActivityThread.java:1780)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在android.app.ActivityThread.access $ 2400(ActivityThread.java:117)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:978)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在android.os.Handler.dispatchMessage(Handler.java:99)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在android.os.Looper.loop(Looper.java:123)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在android.app.ActivityThread.main(ActivityThread.java:3647)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在java.lang.reflect.Method.invokeNative(本机方法)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在java.lang.reflect.Method.invoke(Method.java:507)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
9月一日至15日:14:23.210:ERROR / AndroidRuntime(404):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

MODIFY_PHONE_STATE是一个系统只许可,因此应用程序不能得到它。

这可能是从平台的previous版本进行了更改,但是这是好的,因为它是唯一保护私有的API,所以如果你正在做的事情,需要它,您使用的是不支持的,并会专用的API导致像您的应用程序打破不同的构建平台。

堆栈抓取你有没有完成,所以没有办法告诉你实际做的事情。

如何始终在Windows上以管理员身份运行应用程序

I write an application that attempts to modify phone call state. It works well on Android 2.2 or less, but throw an exception on Android 2.3 because of the lack of permission on android.permission.MODIFY_PHONE_STATE permission (I declared this permission on AndroidManifest.xml). Any idea? Below is the exception log:

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)

解决方案

MODIFY_PHONE_STATE is a system-only permission, so apps are not allowed to get it.

This may have changed from previous versions of the platform, but that is okay because it is only protecting private APIs, so if you are doing something that requires it, you are using private APIs that are not supported and will result in things like your app breaking on different builds of the platform.

The stack crawl you include is not complete, so there is no way to tell what you are actually doing.

 
精彩推荐