系统应用在发送广播时,可能会出现类似的 log 提示,
01-01 08:06:09.150 2359 3052 E ActivityManager: Sending non-protected broadcast android.intent.action.TEST_ACTION from system 3094:xxx.yyy.zzz/1000 pkg xxx.yyy.zzz
01-01 08:06:09.150 2359 3052 E ActivityManager: java.lang.Throwable
01-01 08:06:09.150 2359 3052 E ActivityManager: at com.android.server.am.ActivityManagerService.checkBroadcastFromSystem(ActivityManagerService.java:19037)
01-01 08:06:09.150 2359 3052 E ActivityManager: at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:19642)
01-01 08:06:09.150 2359 3052 E ActivityManager: at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:19784)
01-01 08:06:09.150 2359 3052 E ActivityManager: at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:240)
01-01 08:06:09.150 2359 3052 E ActivityManager: at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2970)
01-01 08:06:09.150 2359 3052 E ActivityManager: at android.os.Binder.execTransact(Binder.java:674)
虽然出现这个 log ,但作为系统应用,是可以正常发送广播的,功能没问题。
看到 E 级 log ,看着不顺,想着去掉。
基于 AN 8.0 ,
发送广播的地方在 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
中,
可以这样修改,在 frameworks/base/core/res/AndroidManifest.xml
中对发送的广播添加声明,
<protected-broadcast android:name="android.intent.action.TEST_ACTION" />
添加这个修改后,这个广播就是系统级的了,也不会出现文首的 log 提示了。
如果第三方app发送这个广播,就会报错,
MessageQueue-JNI: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.TEST_ACTION from pid=6894, uid=10050
相当于做了一层保护,防止第三方app发送系统广播,防止系统原有逻辑被破坏。
系统app则可以继续发送这个广播。
版权声明:本文为weixin_44021334原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。