Android 自定义广播权限例子

时间:2021-10-13 15:26:00

自定义广播权限例子:
发送者:Demo_BroadcastSend 发出广播(1、发出无权限广播按钮 , 2、发出带权限广播按钮)

接收者:Demo_BroadcastReceive_A 无自定义广播权限

接收者:Demo_BroadcastReceive_B 有自定义广播权限(manifest中)
<uses-permission android:name="com.sdf.userdefined.receiver.permission" />
<permission
android:name="com.sdf.userdefined.receiver.permission"
android:protectionLevel="normal" />


--------------------------------------------------------------------------------

Demo_BroadcastSend发出无权限广播,Demo_BroadcastReceive_A与Demo_BroadcastReceive_B中的广播接收器均可接收到改广播

结果:
[MyReceiver--->B] onReceive : intent = Intent { act=com.sdf.userdefined.receiver.action cat=[receiver] flg=0x10 cmp=com.sdf.demo_broadcastreceive_b/.MyReceiverB (has extras) }
[MyReceiver--->B] onReceive : message = 无 ---> 权限的广播

[MyReceiver--->A] onReceive : intent = Intent { act=com.sdf.userdefined.receiver.action cat=[receiver] flg=0x10 cmp=com.sdf.demo_broadcastreceive_a/.MyReceiverA (has extras) }
[MyReceiver--->A] onReceive : message = 无 ---> 权限的广播


--------------------------------------------------------------------------------

步骤1:
Demo_BroadcastSend 中(manifest)定义以下权限:
<uses-permission android:name="com.sdf.userdefined.send.permission" />
<permission
android:name="com.sdf.userdefined.send.permission"
android:protectionLevel="normal" />

步骤2:
Demo_BroadcastReceive_B 中(manifest)定义以下权限:
<uses-permission android:name="com.sdf.userdefined.receiver.permission" />
<permission
android:name="com.sdf.userdefined.receiver.permission"
android:protectionLevel="normal" />


Demo_BroadcastReceive_B 中 ( manifest)的广播接收器加上权限属性:
android:permission="com.sdf.userdefined.send.permission"

以上两步骤同时实现才可接收带权限的广播

结果:
[MyReceiver--->B] onReceive : intent = Intent { act=com.sdf.userdefined.receiver.action cat=[receiver] flg=0x10 cmp=com.sdf.demo_broadcastreceive_b/.MyReceiverB (has extras) }
[MyReceiver--->B] onReceive : message = 带 ---> 权限的广播

--------------------------------------------------------------------------------

广播发送者:Demo_BroadcastSend

Manifest.xml

<!-- 自定义权限 -->

<uses-permission android:name="com.sdf.userdefined.send.permission" />
<!-- 在声明权限时需要一个android:protectionLevel的属性,它代表“风险级别”:normal、dangerous、signature、signatureOrSystem -->
<permission
android:name="com.sdf.userdefined.send.permission"
android:protectionLevel="normal" />

 

Code :

  发出无权限广播:

    /**
    * Demo_BroadcastReceive_A 与 Demo_BroadcastReceive_B
    * 中均过滤接收该广播,因为intent的action一样
    */
    Intent i = new Intent("com.sdf.userdefined.receiver.action");
    i.addCategory("receiver");
    i.putExtra("message", "无 ---> 权限的广播");
    /**
    * 不带权限,即只要有过滤com.sdf.userdefined.receiver.action即可接收该广播,即
    * Demo_BroadcastReceive_A 与 Demo_BroadcastReceive_B 均可收到
    */
    sendOrderedBroadcast(i, null);

  

  发出带权限广播:

    /**

    * Demo_BroadcastReceive_A 与 Demo_BroadcastReceive_B
    * 中均过滤接收该广播,因为intent的action一样
    */
    Intent ii = new Intent("com.sdf.userdefined.receiver.action");
    ii.addCategory("receiver");
    ii.putExtra("message", "带 ---> 权限的广播");
    /**
    * com.sdf.userdefined.receiver.permission :
    * 该permission在接收程序中的manifest中定义,即这边带权限的广播发出去,谁的应用中定义了该权限,谁才能接收到,
    * 即只有Demo_BroadcastReceive_B 可收到
    */
    sendOrderedBroadcast(ii, "com.sdf.userdefined.receiver.permission");

 

接收者A:Demo_BroadcastReceive_A 

Manifest.xml

<!-- 带权限广播接收器 ,无自定义权限时,android:permission该属性可以去掉 -->
<receiver
  android:name="com.sdf.demo_broadcastreceive_a.MyReceiverA"
  android:permission="com.sdf.userdefined.send.permission" >
  <intent-filter>
    <action android:name="com.sdf.userdefined.receiver.action" />

    <category android:name="receiver" />
  </intent-filter>

</receiver>

 

Code:

package com.sdf.demo_broadcastreceive_a;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
* 广播接收器
*
* @author dengfu.su
*
*/
public class MyReceiverA extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    Log.d("sdf", "[MyReceiver--->A] onReceive : intent = " + intent.toString());
    Log.d("sdf", "[MyReceiver--->A] onReceive : message = " + intent.getStringExtra("message"));

  }

}

 

接收者A:Demo_BroadcastReceive_B 

Manifest.xml:

<!--
  以下权限为自定义广播权限,当该权限被定义时,Demo_BroadcastSend中发出带该权限的广播,
  本应用的广播接收器即可接收到该广播 ,而Demo_BroadcastReceive_A 接收不到
-->
<uses-permission android:name="com.sdf.userdefined.receiver.permission" />

<permission
  android:name="com.sdf.userdefined.receiver.permission"
  android:protectionLevel="normal" />

 

<!-- 带权限广播接收器 -->
<receiver
  android:name="com.sdf.demo_broadcastreceive_b.MyReceiverB"
  android:permission="com.sdf.userdefined.send.permission" >
    <intent-filter>
      <action android:name="com.sdf.userdefined.receiver.action" />

      <category android:name="receiver" />
    </intent-filter>
</receiver>

 

Code:

package com.sdf.demo_broadcastreceive_b;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
* 带权限的广播接收器
*
* @author dengfu.su
*
*/
public class MyReceiverB extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    Log.d("sdf", "[MyReceiver--->B] onReceive : intent = " + intent.toString());
    Log.d("sdf", "[MyReceiver--->B] onReceive : message = " + intent.getStringExtra("message"));

  }

}