Permission Denial: not allowed to send broadcast in android

简介: Permission Denial: not allowed to send broadcast in android
Process: com.example.android_sapphire_navigationbar_test, PID: 2710
                                                                                                    java.lang.SecurityException: Permission Denial: not allowed to send broadcast com.systemui.navigationbar.show from pid=2710, uid=10076
                                                                                                      at android.os.Parcel.createException(Parcel.java:1950)
                                                                                                      at android.os.Parcel.readException(Parcel.java:1918)
                                                                                                      at android.os.Parcel.readException(Parcel.java:1868)
                                                                                                      at android.app.IActivityManager$Stub$Proxy.broadcastIntent(IActivityManager.java:3895)
                                                                                                      at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1009)
                                                                                                      at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:444)
                                                                                                      at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:444)
                                                                                                      at com.example.android_sapphire_navigationbar_test.MainActivity.showSystemUI(MainActivity.java:133)
                                                                                                      at com.example.android_sapphire_navigationbar_test.MainActivity.onClick(MainActivity.java:60)
                                                                                                      at android.view.View.performClick(View.java:6597)
                                                                                                      at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1202)
                                                                                                      at android.view.View.performClickInternal(View.java:6574)
                                                                                                      at android.view.View.access$3100(View.java:778)
                                                                                                      at android.view.View$PerformClick.run(View.java:25885)
                                                                                                      at android.os.Handler.handleCallback(Handler.java:873)
                                                                                                      at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                                      at android.os.Looper.loop(Looper.java:193)
                                                                                                      at android.app.ActivityThread.main(ActivityThread.java:6718)
                                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
                                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
                                                                                                    Caused by: android.os.RemoteException: Remote stack trace:
                                                                                                      at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:21447)
                                                                                                      at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:22076)
                                                                                                      at android.app.IActivityManager$Stub.onTransact$broadcastIntent$(IActivityManager.java:10175)
                                                                                                      at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:167)
                                                                                                      at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:3300)

因为最近项目里Intent用到了广播”android.intent.action.MEDIA_MOUNTED”, 结果被提示权限不足, 查了下原因, 是因为从4.4开始, 官方开始限制这个广播的使用, 加上了 protected权限, 只能系统内部使用. 如下:

<protected-broadcast android:name="android.intent.action.MEDIA_MOUNTED" />
  • protected-broadcast(暂时从网上搜到这么多,也不知对错,先留着)
    “保护性广播”,在一些AndroidManifest.xml中的一级标记<protected-broadcast>,具体有何作用:


此处指定一个广播,该广播只能被系统发送。


注 意:只有系统appliaction才能在其AndroidManifest.xml中定义Protected Broadcast,系统appliaction包括/system/framework、/system/app、vendor/app下的 package,因此设备中安装的第三方apk中如果定义了Protected Broadcast,那么这个Protected Broadcast将不生效。


简单地说,Android认为有一些广播是只能由系统发送的,如果某个系统级AndroidManifest.xml中写了这个标记,那么在PKMS解析该文件时,就会把“保护性广播”标记中的名字(一般是Action字符串)记录下来。


在系统运作起来之后,如果某个不具有系统权限的应用试图发送系统中的“保护性广播”,AMS会抛出异常,提示"Permission Denial: not allowed to send broadcast"。


代码中可以看到<protected-broadcast>标记的具体写法,如下
<protected-broadcast android:name="android.intent.action.SERVICE_STATE" />
<protected-broadcast android:name="android.intent.action.RADIO_TECHNOLOGY" />
protected-broadcast的作用-CSDN博客


目录
相关文章
|
Shell Android开发
解决Android的adb命令行报错Permission denied
解决Android的adb命令行报错Permission denied
1673 0
解决Android的adb命令行报错Permission denied
|
Android开发
【错误记录】Android 可执行权限报错 ( Cannot run program “/data/user/0/cn.e/ffmpeg“: error=13,Permission denied )
【错误记录】Android 可执行权限报错 ( Cannot run program “/data/user/0/cn.e/ffmpeg“: error=13,Permission denied )
1927 0
【错误记录】Android 可执行权限报错 ( Cannot run program “/data/user/0/cn.e/ffmpeg“: error=13,Permission denied )
|
7月前
|
Android开发
Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
72 3
|
7月前
|
定位技术 Android开发
Android 12蓝牙报java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
Android 12蓝牙报java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission
244 1
|
安全 Android开发
Android 动态权限 permission 操作类简单封装
Android 动态权限 permission 操作类简单封装
|
Android开发
Permission failure: android.permission.CAPTURE_AUDIO_OUTPUT 解决办法
Permission failure: android.permission.CAPTURE_AUDIO_OUTPUT 解决办法
402 0
|
XML 存储 前端开发
Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取
Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取
248 0
Android MVVM框架搭建(七)Permission、AlertDialog、拍照和相册选取
|
Android开发
解决安卓的permission denied for this window type问题
解决安卓的permission denied for this window type问题
308 0
|
Android开发
【安卓开发】Caused by: java.lang.SecurityException: Permission Denial:
【安卓开发】Caused by: java.lang.SecurityException: Permission Denial:
195 0