在调试程序发送广播的时候发生如下bug。导致发送的广播失败。
1595821960(1).png
先来看下log:
2020-07-27 11:54:44.270 425-1569/? E/ActivityManager: Sending non-protected broadcast com.makeblock.discovery.mainservice.robot.set from system 2101:cn.com.mdj.robot/1000 pkg cn.com.mdj.robot
java.lang.Throwable
at com.android.server.am.ActivityManagerService.checkBroadcastFromSystem(ActivityManagerService.java:19134)
at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:19646)
at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:19881)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:240)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2922)
at android.os.Binder.execTransact(Binder.java:697)
2020-07-27 11:54:44.279 425-1569/? E/ActivityManager: Sending non-protected broadcast com.makeblock.discovery.mainservice.robot.set from system 2101:cn.com.mdj.robot/1000 pkg cn.com.mdj.robot
java.lang.Throwable
at com.android.server.am.ActivityManagerService.checkBroadcastFromSystem(ActivityManagerService.java:19134)
at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:19739)
at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:19881)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:240)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2922)
at android.os.Binder.execTransact(Binder.java:697)
这是我在一次开发中出现的,系统中需要发送一个应用自定义的广播,send 之后会报出Sending non-protected broadcast 的异常。
借此机会来解析protected broadcast 的使用,我们在 Android 中broadcast 发送过程解析 中了解了broadcast 发送的整个过程,通过Context 的接口最终会调用到AMS 中broadcastIntent()。
原因:
系统对自定义广播做了保护限制,对广播做了保护限定之后,只有一定权限的用户才可以使用。否则用一次就会打印一次warning,并且保存异常信息到文件中。
解决办法:
<protected-broadcast
android:name="com.makeblock.discovery.mainservice.robot.set" />
1595836676(1).png
网友评论