我面临有关 Android 操作系统的问题。我想检测来电,但来自 API >=30 或 Android>=11 设备,用户授予权限后应用程序崩溃,Logcat 显示以下异常。
FATAL EXCEPTION: main
Process: com.example.callerdetecter, PID: 11623
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.PHONE_STATE from pid=11623, uid=11219
at android.os.Parcel.createExceptionOrNull(Parcel.java:2374)
at android.os.Parcel.createException(Parcel.java:2358)
at android.os.Parcel.readException(Parcel.java:2341)
at android.os.Parcel.readException(Parcel.java:2283)
at android.app.IActivityManager$Stub$Proxy.broadcastIntentWithFeature(IActivityManager.java:5623)
at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1115)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:468)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:468)
at com.example.callerdetecter.MainActivity.prepareBroadcast(MainActivity.java:73)
at com.example.callerdetecter.MainActivity.lambda$onCreate$0$com-example-callerdetecter-MainActivity(MainActivity.java:33)
at com.example.callerdetecter.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7503)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218)
at android.view.View.performClickInternal(View.java:7480)
at android.view.View.access$3600(View.java:813)
at android.view.View$PerformClick.run(View.java:28445)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7950)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:603)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:16429)
at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:162
at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:17116)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2306)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2926)
当您提示用户此运行时权限时,您是否有一个警卫在那里检查用户是否启用了该权限,以及他们是否没有避免广播意图?
您希望确保电话呼叫检测功能仅在首先启用权限的情况下才处于活动状态。
您可能会在启用权限之前触发该功能,因此,为什么 Android 会抛出权限拒绝错误。
你可以发布一些代码吗?有什么可以吗?