android 有序广播 如何终止,Android-有序广播是可以中断的

本文详细介绍了Android中有序广播的工作原理,包括如何通过`abortBroadcast()`方法中断广播的传递,以及在实际开发中如何设置接收顺序和处理业务逻辑。示例代码展示了在两个接收者之间如何操作有序广播,并通过日志输出展示了中断广播的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的博客,Android-广播概念,中介绍了(广播和广播接收者)可以组件与组件之间进行通讯,有两种类型的广播(无序广播 和 有序广播),这篇博客就来讲解有序广播的代码实现:

有序广播:接收者可以自己设置接受的顺序,所以叫有序广播

有序广播是可以中断的,而指定某个接收者的有序广播是无法中断的

在AndroidManifest.xml订阅 两个接收者

定义 MyBroadcastReceiver1 接收者

packageliudeli.croadcast1.br;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;/*** 定义 接收者*/

public class MyBroadcastReceiver1 extendsBroadcastReceiver {private final String TAG = "MyBroadcastReceiver";/*** 接收的方法

*@paramcontext 传递过来的上下文

*@paramintent 传递过来的意图,可以获取很多信息*/@Overridepublic voidonReceive(Context context, Intent intent) {

Log.d(TAG,"【1111111111】intent.getAction():" +intent.getAction());

Log.d(TAG,"【1111111111】intent.getDataString():" +intent.getDataString());//真实开发中是这样写的

if ("my.MyBroadcastReceiver.custom.action2".equals(intent.getAction())) {

String data=intent.getDataString();

String[] dataArray= data.split(":");

Log.d(TAG,"【1111111111】data:" + dataArray[1]);

Log.d(TAG,"【1111111111】music:" + intent.getStringExtra("music"));

}else if ("xxx.action".equals(intent.getAction())) {//做相应的业务逻辑处理//...

} else if ("xxx.action".equals(intent.getAction())) {//做相应的业务逻辑处理//...

}

}

}

定义 MyBroadcastReceiver2 接收者

packageliudeli.croadcast1.br;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;/*** 定义 接收者*/

public class MyBroadcastReceiver2 extendsBroadcastReceiver {private final String TAG = "MyBroadcastReceiver";/*** 接收的方法

*@paramcontext 传递过来的上下文

*@paramintent 传递过来的意图,可以获取很多信息*/@Overridepublic voidonReceive(Context context, Intent intent) {

Log.d(TAG,"【222222222】intent.getAction():" +intent.getAction());

Log.d(TAG,"【222222222】intent.getDataString():" +intent.getDataString());//真实开发中是这样写的

if ("my.MyBroadcastReceiver.custom.action2".equals(intent.getAction())) {

String data=intent.getDataString();

String[] dataArray= data.split(":");

Log.d(TAG,"【222222222】data:" + dataArray[1]);

Log.d(TAG,"【222222222】music:" + intent.getStringExtra("music"));

}else if ("xxx.action".equals(intent.getAction())) {//做相应的业务逻辑处理//...

} else if ("xxx.action".equals(intent.getAction())) {//做相应的业务逻辑处理//...

}

}

}

发送有序广播send:

/*** 发送有序广播*/

public voidsendOrderBroadcast(View view) {/*** 两个接收者在AndroidManifest.xml是这样订阅的:怎么订阅,就怎么发送

*

*

*

*

*

*

* */Intent intent= newIntent();

intent.setAction("my.MyBroadcastReceiver.custom.action");

intent.setData(Uri.parse("OOO:四环奥迪,五环奥运")); //注意:要加 :

intent.putExtra("music", "奥林匹克风歌曲"); //而外携带值//参数一:意图 参数二:谁能接收我的广播(自定义权限)

sendOrderedBroadcast(intent, null);

}

没在 MyBroadcastReceiver2 加入中断的日志

12-17 08:49:52.885 4872-4872/liudeli.croadcast1 D/MyBroadcastReceiver: 【222222222】intent.getAction():my.MyBroadcastReceiver.custom.action

12-17 08:49:52.885 4872-4872/liudeli.croadcast1 D/MyBroadcastReceiver: 【222222222】intent.getDataString():OOO:四环奥迪,五环奥运

12-17 08:49:52.887 4872-4872/liudeli.croadcast1 D/MyBroadcastReceiver: 【1111111111】intent.getAction():my.MyBroadcastReceiver.custom.action

12-17 08:49:52.887 4872-4872/liudeli.croadcast1 D/MyBroadcastReceiver: 【1111111111】intent.getDataString():OOO:四环奥迪,五环奥运

由于MyBroadcastReceiver2 接收者,优先接受到信息,所以在 MyBroadcastReceiver2中断广播,abortBroadcast();

packageliudeli.croadcast1.br;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.util.Log;/*** 定义 接收者*/

public class MyBroadcastReceiver2 extendsBroadcastReceiver {private final String TAG = "MyBroadcastReceiver";/*** 接收的方法

*@paramcontext 传递过来的上下文

*@paramintent 传递过来的意图,可以获取很多信息*/@Overridepublic voidonReceive(Context context, Intent intent) {/*** 中断广播*/abortBroadcast();

Log.d(TAG,"【222222222】intent.getAction():" +intent.getAction());

Log.d(TAG,"【222222222】intent.getDataString():" +intent.getDataString());//真实开发中是这样写的

if ("my.MyBroadcastReceiver.custom.action2".equals(intent.getAction())) {

String data=intent.getDataString();

String[] dataArray= data.split(":");

Log.d(TAG,"【222222222】data:" + dataArray[1]);

Log.d(TAG,"【222222222】music:" + intent.getStringExtra("music"));

}else if ("xxx.action".equals(intent.getAction())) {//做相应的业务逻辑处理//...

} else if ("xxx.action".equals(intent.getAction())) {//做相应的业务逻辑处理//...

}

}

}

在 MyBroadcastReceiver2 加入中断的日志

12-17 08:56:36.008 5070-5070/liudeli.croadcast1 D/MyBroadcastReceiver: 【222222222】intent.getAction():my.MyBroadcastReceiver.custom.action

12-17 08:56:36.008 5070-5070/liudeli.croadcast1 D/MyBroadcastReceiver: 【222222222】intent.getDataString():OOO:四环奥迪,五环奥运

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值