Android 广播的那些 注意点

1. 广播的权限

​ 我们在发送广播和接收广播的时候都是可以带上权限的

​ 1. 对于发送:

sendBroadcast("com.android.XXX_ACTION", "com.android.permission.RECV_XXX");

​ 第二个参数permission代表的是 谁能接收我的广播,也就是 待接收方在AndroidManifest.xml声明这个权限后,才有资格接收这个广播

  1. 对于接收

    	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声明这个权限后,才有资格发送这个广播

    1. 权限可以声明,那是哪里定义的呢?
      定义权限:
      既然可以声明使用某个权限,那么肯定某个地方定义了这个权限

    2. 安全的发送广播方式
      发送方
      使用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. 广播的限制

  1. 对于静态注册的广播:

    Android 8 中 默认的action 设置 已经无法实现发送

​ 发送方需要达到下面其中的条件:

1. 调用setPackage 指定接收的模块组件包的名称
2. 调用setComponent指定接收模块组件包的名称和 receiver的名称,(需要是全路径)
3. 成为前台广播,intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
 **默认的广播都是后台的**
  1. 对于 动态注册的广播

    可以使用setPackage 或者 setComponent 指定想要发送组件(非强制)

posted @ 2021-04-19 12:28  make_wheels  阅读(226)  评论(0编辑  收藏  举报