android 进程间广播通信

android 进程间广播通信

项目需求,和同事分别开发两个应用程序,其中一个功能点是需要同事给我发送具体信息,我接收到这个信息后。做其他具体处理。很早之前有用过。后来好久不用了,今天使用,查了些其他资料,来记录一下。方便以后可以直接使用。

Android 8.0前进程间广播通信

两个APP, A.apk,B.apk ;
A需要向B通过广播发送消息。

第一步,B 中在mainfast 文件中注册接收广播


<receiver android:name=".broadcast.MyBoradCast">
       <intent-filter>
              <action android:name="com.cn.broadcast.test.ACTION"/>
       </intent-filter>
</receiver>
  

第二步,B 中创建自定义 广播类 接收广播


	public class MyBoradCast extends BroadcastReceiver {

    public static final String BROADCAST_ACTION_TEST = "com.cn.broadcast.test.ACTION";


    @Override
    public void onReceive(Context context, Intent intent) {
        if (BROADCAST_ACTION_TEST .equals(intent.getAction())){
            Bundle bundle = intent.getExtras();
            String test = (String) bundle.get("text");
        	Log.i("测试接收到广播:",test );
        }
    }
}

第三步,A 中创建 发送广播

 
 public static final String BROADCAST_ACTION_TEST = "com.cn.broadcast.test.ACTION";
	...
	...
	
 // 通过Intent类的构造方法指定广播的ID
 Intent intent = new Intent(BROADCAST_ACTION_TEST );测试接收到广播
 // 将要广播的数据添加到Intent对象中
 intent.putExtra("text", "测试发送广播");
 // 发送广播
 sendBroadcast(intent);

到此处就可以了,运行 第三步 发送广播,则可在A 中收到B 发送的信息。

Android 8.0 进程间广播通信

Android 8.0 部分广播 不能进行静态注册。此处我们使用动态注册

静态注册,也就是说在AndroidManifest文件中对BroadcastReceiver进行注册,通常还会加上action用来过滤。

动态注册,调用Context中的registerReceiver对广播进行动态注册,使用unRegisterReceiver方法对广播进行取消注册的操作。

仍然是 两个APP, A.apk,B.apk ;
A需要向B通过广播发送消息。

第一步,A 定义权限,并且使用自定义权限

<uses-permission android:name="com.cn.customview.permissions.MY_BROADCAST" />


<permission
   android:name="com.cn.customview.permissions.MY_BROADCAST"
   android:protectionLevel="signature" >
</permission>

注意:android:protectionLevel=”signature” 如果是同一个应用可以这么声明,如果跨app发送广播(比如A app向B app发送广播),则需要去掉android:protectionLevel=”signature”。

第二步,B 注册广播


BroadcastReceiver boradCast = new MyBoradCast();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BROADCAST_ACTION_DISC);
//第三个参数为权限,如果没有其他注意事项可以不加,此处做权限限制,目的是只为收取 BROADCAST_PERMISSION_DISC 权限广播。 
//(*****
//有个好处,如果只想收到自己定义的权限,则需要添加这个权限。相当于自己定义的内部广播
//)
registerReceiver(boradCast,intentFilter,BROADCAST_PERMISSION_DISC,null);
//注册一个广播,并且申明,这个广播需要BROADCAST_PERMISSION_DISC权限才能收到消息。但是我们应用程序已经注册了这个权限。所以是有这个权限的。









public class MyBoradCast extends BroadcastReceiver {

    public static final String BROADCAST_PERMISSION_DISC = "com.cn.customview.permissions.MY_BROADCAST";
    public static final String BROADCAST_ACTION_DISC = "com.cn.customview.permissions.my_action";

    @Override
    public void onReceive(Context context, Intent intent) {
    	 Bundle bundle = intent.getExtras();
    	 String tests  = bundle.get("test");
         Log.i("测试接收到广播:",tests);
    }
}


注册一个广播,并且申明,这个广播需要BROADCAST_PERMISSION_DISC权限才能收到消息。但是我们应用程序已经注册了这个权限。所以是有这个权限的。

同时 在B 的manifest 中声明权限


<uses-permission android:name="com.cn.customview.permissions.MY_BROADCAST" />

第三步 在A 中发送广播

	  Intent intent = new Intent();
	  	//		广播action,只有和这个action 一样的接受者,才可以接收到广播
                intent.setAction(BROADCAST_ACTION_DISC );
                intent.putExtra("test","测试一下");
                Log.i("发送广播","test");
                //权限
                sendBroadcast(intent,BROADCAST_PERMISSION_DISC);

sendBroadcast(int,permission)
第二个参数 代表接收消息的广播需要BROADCAST_PERMISSION_DISC权限。

注意:
1.registerReceiver(receiveBroadCast, filter,BROADCAST_PERMISSION_DISC,null);如果改为registerReceiver(receiveBroadCast, filter); 照样能够收到第三步发送的消息,因为我们在xml里面已经申请了BROADCAST_PERMISSION_DISC权限,所以sendBroadcast(intent,BROADCAST_PERMISSION_DISC);发送广播我们依然能收到。

2.sendBroadcast(intent,BROADCAST_PERMISSION_DISC); 改为sendBroadcast(intent);也同样能收到这个消息。因为第一个的意思是收到这个消息的广播监听器必须有BROADCAST_PERMISSION_DISC权限,如果第二个参数去掉,则说明广播监听器不需要任何权限就能收到这个消息。

部分内容有粘贴大佬的,原文地址贴出
原文地址

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值