Android-有序广播是可以中断的
在之前的博客,Android-广播概念,中介绍了(广播和广播接收者)可以组件与组件之间进行通讯,有两种类型的广播(无序广播 和 有序广播),这篇博客就来讲解有序广播的代码实现:
有序广播:接收者 可以自己设置接受的顺序,所以叫有序广播
有序广播是可以中断的,而指定某个接收者的有序广播是无法中断的
在AndroidManifest.xml订阅 两个接收者
<!--
订阅(Xml形式订阅接收者)
注意:订阅的是接收者,和广播发送没有半毛钱关系
-->
<receiver android:name=".br.MyBroadcastReceiver1"> <intent-filter
android:priority="200"> <!-- 设置优先级别为 200 (最大100 / 最小 -1000) -->
<!-- Action这是必写的 -->
<action android:name="my.MyBroadcastReceiver.custom.action" /> <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
<data android:scheme="OOO" /> <!-- 注意:这里不能加 : --> </intent-filter> </receiver> <!--
订阅(Xml形式订阅接收者)
注意:订阅的是接收者,和广播发送没有半毛钱关系
-->
<receiver android:name=".br.MyBroadcastReceiver2"> <intent-filter
android:priority="600"> <!-- 设置优先级别为 600 (最大100 / 最小 -1000) -->
<!-- Action这是必写的 -->
<action android:name="my.MyBroadcastReceiver.custom.action" /> <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
<data android:scheme="OOO" /> <!-- 注意:这里不能加 : --> </intent-filter> </receiver>
定义 MyBroadcastReceiver1 接收者
package liudeli.croadcast1.br; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* 定义 接收者
*/
public class MyBroadcastReceiver1 extends BroadcastReceiver { private final String TAG = "MyBroadcastReceiver"; /**
* 接收的方法
* @param context 传递过来的上下文
* @param intent 传递过来的意图,可以获取很多信息
*/
@Override
public void onReceive(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 接收者
package liudeli.croadcast1.br; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* 定义 接收者
*/
public class MyBroadcastReceiver2 extends BroadcastReceiver { private final String TAG = "MyBroadcastReceiver"; /**
* 接收的方法
* @param context 传递过来的上下文
* @param intent 传递过来的意图,可以获取很多信息
*/
@Override
public void onReceive(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 void sendOrderBroadcast(View view) {
/**
* 两个接收者在AndroidManifest.xml是这样订阅的:怎么订阅,就怎么发送
* <intent-filter>
* <!-- Action这是必写的 -->
* <action android:name="my.MyBroadcastReceiver.custom.action" />
*
* <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
* <data android:scheme="OOO" /> <!-- 注意:这里不能加 : -->
* </intent-filter>
*/
Intent intent = new Intent();
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();
package liudeli.croadcast1.br; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* 定义 接收者
*/
public class MyBroadcastReceiver2 extends BroadcastReceiver { private final String TAG = "MyBroadcastReceiver"; /**
* 接收的方法
* @param context 传递过来的上下文
* @param intent 传递过来的意图,可以获取很多信息
*/
@Override
public void onReceive(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:四环奥迪,五环奥运
Android-有序广播是可以中断的的更多相关文章
- Android的有序广播和无序广播(解决安卓8.0版本之后有序广播的接收问题)
		
前言 Google从Android8.0版本开始,对在清单文件中静态注册广播做了限制. *** 特殊广播(动态注册广播接收者) 说:有序广播和无序广播之前,咱们先来说下Android中一些特殊的广播如 ...
 - Android学习笔记(十二)BroadcastReceiver的有序广播和优先级
		
前两篇博文中简单整理了普通广播,其实还有有序广播,有序广播在开发中也是比不可少的,可以给广播接收者设定优先级来控制接受顺序,并却可以中断广播传递等等. 一.两种Broadcast: · 普通广播(No ...
 - Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)
		
之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播: 1. 我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...
 - android 51  有序广播
		
无序广播:一条广播发送出去,多个接收者接收没有顺序.有序广播:广播接收者可以设置优先级,优先级高的先收到广播.有序广播可以设置优先级. mainActivity.java package com.sx ...
 - Android BroadcastReceiver实例Demo(有序广播的发送)
		
上一篇简介了广播的发送,这篇主要介绍下,有序广播的发送. 设置完相关属性的时候,广播就会依照有序的方式进行发送: 发送顺序: 先发送第二条广播: 再发送第一条广播: 最后发送第三条广播. 代码例如以下 ...
 - 有序广播和标准广播 --Android开发
		
一.标准广播和有序广播也很容易理解的. 标准广播: (1)通过sendBroadcast()方法发送 (2)通过异步方式发送,广播接收者的执行顺序是不明确的 有序广播: (1)通过sendOrderB ...
 - Android(java)学习笔记122:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)
		
之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播: 1. 我们首先了解一下有序广播和无序广播区别和联系? (1)有序广播> 接受者有优先级, ...
 - Android BroadcastReceiver 发送有序广播
		
普通广播(Normal Broadcast): 一,优缺点:和有序广播的优缺点相反! 二,发送广播的方法:sendBroadcast() 有序广播(Ordered Broadcast): 一,优缺点 ...
 - Android菜鸟的成长笔记(26)——普通广播与有序广播
		
BroadcastReceiver是Android系统的四大组件之一,BroadcastReceiver是一个全局的系统级监听器,它拥有自己的独立进程. 我们来写一个最简单的广播接收过程 先在mani ...
 
随机推荐
- PAT 甲级 1010 Radix (25)(25 分)进制匹配(听说要用二分,历经坎坷,终于AC)
			
1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...
 - [C#]反射相关
			
//Type type = DataHelper.Instance.GetType(); //MethodInfo[] infos = type.GetMethods(BindingFlags.Ins ...
 - Linux Expect 简介和使用实例
			
expect简介和使用实例 1 expect 简介 expect 是用来进行自动化控制和测试的工具. 主要是和交互式软件telnet ftp passwd fsck rlogin ssh tip 等进 ...
 - mysql-6正则表达式
			
mysql正则表达式 匹配的两种方式: 1.模糊匹配:like 2.正则表达式 正则表达式语法: 语法 说明 ^ 起始位置.如果设置了RegExp对象的Multiline属性,^也匹配'\n'或'\r ...
 - 什么是ODBC ?
			
ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一 ...
 - Synergy使用(安装及配置)
			
最近在看一篇文章,找到了一款符合我需求的软件:Synergy. Synergy可以在多台电脑上进行鼠标与键盘及剪贴板(只能共享文本)的共享.不用每台电脑都插上这些外设了... 共享文件可以参看微软出品 ...
 - selenium+python自动化79-文件下载(SendKeys)
			
前言 文件下载时候会弹出一个下载选项框,这个弹框是定位不到的,有些元素注定定位不到也没关系,就当没有鼠标,我们可以通过键盘的快捷键完成操作. SendKeys库是专业的处理键盘事件的,所以这里需要用S ...
 - 关于RDS for mysql中导入数据库set global event_scheduler =1 需要更多超级权限
			
关于RDS中导入数据库set global event_scheduler =1 需要更多超级权限 报错提示 其实这个意思是 让mysql自动启动 计划任务 如果在 命令行下 查询 SHOW VAR ...
 - 跟我学算法 - 读取excel文件(xlrd)
			
import xlrd import numpy as np # fname 表示文件名 fname = '1白.xlsx'# 打开文件 bk = xlrd.open_workbook(fname)# ...
 - LPCTSTR和LPTSTR和char *究竟有什么区别
			
LPSTR = char* LPCSTR = const char* LPTSTR: 如果定义了UNICODE宏,那么LPTSTR = wchar_t*否则LPTSTR = char* LPCTSTR ...