1. 广播的权限
我们在发送广播和接收广播的时候都是可以带上权限的
1. 对于发送:
sendBroadcast("com.android.XXX_ACTION", "com.android.permission.RECV_XXX");
第二个参数permission代表的是 谁能接收我的广播,也就是 待接收方在AndroidManifest.xml声明这个权限后,才有资格接收这个广播
-
对于接收
receiver android:name=".receiver.IFlytekMessageReceiver" android:enabled="true" android:exported="true" android:permission="iauto.permission.EXECUTE_VR_ACTION"> <intent-filter> <action android:name="com.iflytek.autofly.handMessage" /> </intent-filter> </receiver>
里面的android:permission 代表谁可以给我发送广播?,也就是 待发送方 必须 在AndroidManifest.xml声明这个权限后,才有资格发送这个广播
-
权限可以声明,那是哪里定义的呢?
定义权限:
既然可以声明使用某个权限,那么肯定某个地方定义了这个权限 -
安全的发送广播方式
发送方
使用mContext.sendBroadcast(intent, VrMsgDef.VR_SENDBROADCAST_PERMISSION);
第二个参数代表必须有VrMsgDef.VR_SENDBROADCAST_PERMISSION权限的应用才能接收这个广播
然后需要声明
这个声明是因为接收方的
receiver android:name=".receiver.IFlytekMessageReceiver"
android:enabled="true"
android:exported="true"
android:permission="iauto.permission.EXECUTE_VR_ACTION">
要求发送方具有的权限
接受方
因为发送方的sendBroadcast,所以有这个权限
receiver android:name=".receiver.IFlytekMessageReceiver"
android:enabled="true"
android:exported="true"
android:permission="iauto.permission.EXECUTE_VR_ACTION">
要求发送方具有的权限
-
2. 广播的限制
-
对于静态注册的广播:
Android 8 中 默认的action 设置 已经无法实现发送
发送方需要达到下面其中的条件:
1. 调用setPackage 指定接收的模块组件包的名称
2. 调用setComponent指定接收模块组件包的名称和 receiver的名称,(需要是全路径)
3. 成为前台广播,intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
**默认的广播都是后台的**
-
对于 动态注册的广播
可以使用setPackage 或者 setComponent 指定想要发送组件(非强制)