之前的项目都是固定的板卡Android 8.0之前的,今天适配新的板卡 Android 12 上意外发现 广播无法接收到消息 在此记录!
Android 8.0 之后 谷歌对静态广播做了一些限制,具体如下!
从Android 8.0 (API级别26)开始,系统对清单声明的接收者施加了额外的限制。如果你的应用程序的目标是Android 8.0或更高版本,你不能使用清单来为大多数隐式广播(广播不是专门针对你的应用程序)声明一个接收器。当用户正在积极使用你的应用程序时,你仍然可以使用上下文注册的接收器就这么个意思,怎么改呢?
发送部分代码:
在当前应用发送广播发送:
Intent intent =new Intent("com.example.broadcasttest.MY_BROADCAST");
intent.putExtra("message", "send a message!!!");
intent.setPackage(getPackageName());
sendBroadcast(intent);
发送给其他应用的广播:
Intent intent =new Intent("com.example.broadcasttest.MY_BROADCAST");
intent.setComponent(new ComponentName("接收广播的包名", "接收广播的包名.MyBroadcastReceiver"));
intent.putExtra("message", "send a message!!!");
sendBroadcast(intent);
这个地方注意下 setComponent()
两个参数 pkg :发送指定应用的包名 cls :指定发送到广播接收器的类名,必须是全名,带上包名!!!
接收代码:
AndroidManifest中记得增加这个广播权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
最后别忘了注册
这里的exported属性表示是否允许这个广播接收器接收本程序以外的广播,enabled属性表示是否启用这个广播接收器!都得是true
好了,就这样!
网友评论