android广播跨app通信,Android学习笔记八:用Broadcast Receiver跨进程(跨app)通信

在前面介绍四大组件的时候提到了可以对外部事件进行过滤的Broadcast Receiver,这里就对它的用法作进一步的探讨。

一:Broadcast Receiver的使用

主要有以下三个流程:定义接收器,在其中定义接收到广播后的响应行为——注册接收器,配置可以接收到什么广播——在其他地方发送广播。

1)定义接收器:继承BroadcastReceiver定义子类

public class MyBroadcastReceiver extendsBroadcastReceiver {

@Overridepublic voidonReceive(Context context, Intent intent) {//定义接收到广播后的操作

}

}

2)在AndroidManifest.xml中注册接收器,通过intent-filter配置其action

3)在其他地方,通过intent来发送广播

Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); //指明action类型

sendBroadcast(intent);

二:广播的响应链与优先级

通过intent来发送广播时,是以action来匹配广播接收器的。如果,有多个广播接收器,其action一样,会如何呢?这就是广播的链式响应。

当多个接收器接收广播的action相同时,则以它们在AndroidManifest.xml中注册的先后顺序依次接受、响应广播。

1)那么,这个过程可控吗?

当然,我们可以在AndroidManifest.xml中注册接收器时,为其指定响应优先级,这样,广播的响应就会根据优先级的高低而决定其响应的顺序了。

2)响应链条可以终止吗?

可以,我们可以在某一环接收器的   onReceive() 方法中,通过   abortBroadcast();  来终止这个广播往下传递。通常,这个会搭配优先级来使用,达到清晰的链条控制的目的。

三:动态注册广播接收器

上面我们提到的在AndroidManifest.xml中注册是静态注册,静态注册的特点是:在AndroidManifest.xml中注册的接收器对于android系统全局可见,并且随着硬件设备的开启而开启,一直保持开启、监听状态。

如果,我们需要定义一种随着app运行而启动、随着app退出而停止的广播接收器,则需要用动态创建、动态注册的方式。

1)在程序的某个actvity中,以内部类的方式定义广播接收器

public class MainActivity extendsAppCompatActivity {class LocalReceiver extendsBroadcastReceiver {

@Overridepublic voidonReceive(Context context, Intent intent) {//定义响应

}

}

}

2)在activity的其他方法中(一般为onCreate())创建intent-filter,为其添加action类型;然后把内部创建的接收器实例以及intent-filter实例作为参数,通过LocalBroadcastManager.registerReceiver(localReceiver, intentFilter)动态注册

intentFilter = newIntentFilter(); //创建intent-filter

intentFilter.addAction("com.example.localbroadcast.LOCAL_BROADCAST"); //添加action类型

localReceiver= newLocalReceiver(); //创建内部广播接收器实例

localBroadcastManager= localBroadcastManager.getInstance(this); //获取系统本地广播接收器管理类实例

localBroadcastManager.registerReceiver(localReceiver, intentFilter); //注册广播接收器

3)在该app的其他地方,发送广播

Intent intent = new Intent("com.example.localbroadcast.LOCAL_BROADCAST");

localBroadcastManager.sendBroadcast(intent); //注意:此处是通过localBroadcastManager来发送广播的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 广播可以实现应用通信,即一个应用程序发送广播,另一个应用程序接收广播。这种应用通信的方式可以用于实现不同应用程序之间的协作和数据交换。 具体来说,广播分为两种类型:标准广播和有序广播。标准广播是一种完全异步的广播机制,即发送者不需要等待接收者的响应,接收者也不能阻止其他接收者接收该广播。而有序广播则是一种同步的广播机制,即广播发送者会依次将广播发送给每个接收者,并且每个接收者都可以在接收到广播后终止广播或将广播继续传递给下一个接收者。 如果你想实现应用广播,需要在发送广播时指定广播的 Action 和 Package,以及在接收广播时声明相应的 Intent Filter。具体来说,可以使用以下代码在一个应用程序中发送广播: ```java Intent intent = new Intent(); intent.setAction("com.example.MY_ACTION"); intent.setPackage("com.another.application.package"); sendBroadcast(intent); ``` 在另一个应用程序中,可以使用以下代码声明广播接收器,并在 Manifest 文件中注册该接收器: ```java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("com.example.MY_ACTION".equals(intent.getAction())) { // 处理接收到的广播 } } } ``` ```xml <receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.example.MY_ACTION" /> </intent-filter> </receiver> ``` 需要注意的是,为了保证广播的安全性和合法性,Android 8.0 及以上版本对广播发送和接收做了一些限制,具体可以参考官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值