Android-有序广播
在之前的博客,Android-广播概念,中介绍了(广播和广播接收者)可以组件与组件之间进行通讯,有两种类型的广播(无序广播 和 有序广播),这篇博客就来讲解有序广播的代码实现:
有序广播:接收者 可以自己设置接受的顺序,所以叫有序广播
定义 MyBroadcastReceiver 接收者
package liudeli.croadcast1; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* 定义 接收者
*/
public class MyBroadcastReceiver extends BroadcastReceiver { private final String TAG = MyBroadcastReceiver.class.getSimpleName(); /**
* 接收的方法
* @param context 传递过来的上下文
* @param intent 传递过来的意图,可以获取很多信息
*/
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "【111】intent.getAction():" + intent.getAction());
Log.d(TAG, "【111】intent.getDataString():" + intent.getDataString()); // 真实开发中是这样写的
if ("my.MyBroadcastReceiver.custom.action2".equals(intent.getAction())) {
String data = intent.getDataString();
String[] dataArray = data.split(":");
Log.d(TAG, "【111】data:" + dataArray[1]);
Log.d(TAG, "【111】music:" + intent.getStringExtra("music"));
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
}
}
}
定义 MyBroadcastReceiver2 接收者
package liudeli.croadcast1; 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.class.getSimpleName(); /**
* 接收的方法
* @param context 传递过来的上下文
* @param intent 传递过来的意图,可以获取很多信息
*/
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "【222】intent.getAction():" + intent.getAction());
Log.d(TAG, "【222】intent.getDataString():" + intent.getDataString()); // 真实开发中是这样写的
if ("my.MyBroadcastReceiver.custom.action2".equals(intent.getAction())) {
String data = intent.getDataString();
String[] dataArray = data.split(":");
Log.d(TAG, "【222】data:" + dataArray[1]);
Log.d(TAG, "【222】music:" + intent.getStringExtra("music"));
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
}
}
}
第一步:在onCreate() 订阅接收者 在订阅的时候给自己设置优先级别 -1000 --> 1000
第二步:点击按钮发送广播(原则:怎么订阅就怎么发送)
第三部:在onDestroy()解除订阅
package liudeli.croadcast1; import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.view.View; public class NewActivity2 extends Activity { private MyBroadcastReceiver myBroadcastReceiver;
private MyBroadcastReceiver2 myBroadcastReceiver2; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_new2); /**
* 【Java代码方式订阅 接收者】
* 唯一可以new的组件就是 广播 接收者
*/
myBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("my.MyBroadcastReceiver.custom.action.sendOrderBroadcast");
intentFilter.addDataScheme("zhangyusheng"); // 注意:这里不能加 :
intentFilter.setPriority(88); // 在订阅的时候给自己设置优先级别 -1000 --> 1000
registerReceiver(myBroadcastReceiver, intentFilter); /**
* 【Java代码方式订阅 接收者】
* 唯一可以new的组件就是 广播 接收者
*/
myBroadcastReceiver2 = new MyBroadcastReceiver2();
IntentFilter intentFilter2 = new IntentFilter();
intentFilter2.addAction("my.MyBroadcastReceiver.custom.action.sendOrderBroadcast");
intentFilter2.addDataScheme("zhangyusheng"); // 注意:这里不能加 :
intentFilter2.setPriority(1000); // 在订阅的时候给自己设置优先级别 -1000 --> 1000
registerReceiver(myBroadcastReceiver2, intentFilter2);
} /**
* 发送有序广播
*/
public void sendOrderBroadcast(View view) {
/**
* 接收者是这样订阅的:怎么订阅,就怎么发送
* IntentFilter intentFilter = new IntentFilter();
* intentFilter.addAction("my.MyBroadcastReceiver.custom.action.sendOrderBroadcast");
* intentFilter.addDataScheme("zhangyusheng"); // 注意:这里不能加 :
*/
Intent intent = new Intent();
intent.setAction("my.MyBroadcastReceiver.custom.action.sendOrderBroadcast");
intent.setData(Uri.parse("zhangyusheng:亚洲第一男高音")); // 注意:要加 :
intent.putExtra("music", "我期待 作词作曲 张雨生"); // 而外携带值 // 参数一:意图 参数二:谁能接收我的广播(自定义权限)
sendOrderedBroadcast(intent, null);
} /**
* Java方式订阅接收者后 必须要解除订阅
*/
@Override
protected void onDestroy() {
super.onDestroy();
if (myBroadcastReceiver != null)
unregisterReceiver(myBroadcastReceiver); if (myBroadcastReceiver2 != null)
unregisterReceiver(myBroadcastReceiver2);
}
}
现在就是有序广播 接收者 的信息:【222】先打印 先接受 是因为设置了优先级别:1000 ,而【111】后接受 是因为设置了优先级别:88
12-17 08:11:45.536 4165-4165/liudeli.croadcast1 D/MyBroadcastReceiver: 【222】intent.getAction():my.MyBroadcastReceiver.custom.action.sendOrderBroadcast
12-17 08:11:45.536 4165-4165/liudeli.croadcast1 D/MyBroadcastReceiver: 【222】intent.getDataString():zhangyusheng:亚洲第一男高音
12-17 08:11:45.550 4165-4165/liudeli.croadcast1 D/MyBroadcastReceiver: 【111】intent.getAction():my.MyBroadcastReceiver.custom.action.sendOrderBroadcast
12-17 08:11:45.550 4165-4165/liudeli.croadcast1 D/MyBroadcastReceiver: 【111】intent.getDataString():zhangyusheng:亚洲第一男高音
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 ...
- Android的有序广播和无序广播(解决安卓8.0版本之后有序广播的接收问题)
前言 Google从Android8.0版本开始,对在清单文件中静态注册广播做了限制. *** 特殊广播(动态注册广播接收者) 说:有序广播和无序广播之前,咱们先来说下Android中一些特殊的广播如 ...
- Android study --- 广播
广播接收者 在Android系统运行时会产生很多事件,事件产生时,回想系统发送广播,只要向系统发送广播,系统就知道发生了相应的事件,从而执行相对应的代码.在系统中只要使用广播接受者,就可以接收广播 创 ...
随机推荐
- Hibernate SQL 查询
本文转载自:https://www.cnblogs.com/li3807/p/6358386.html Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQ ...
- VCS常用指令
常用命令介绍 对VCS的常用命令进行介绍,便于工程师进行日常维护.本手册描述的命令仅供参考,具体描述请以Veritas公司提供的相关资料为准. VCS的安装和命令都在下列目录下:sbin, /usr/ ...
- 处理DateTime.Now不经过ToString()转换的格式(带有AM、PM)问题
问题是这样的: DateTime.Now不经过ToString()转换,网站部署到测试服务器(国内)得到的时间格式是:2018/8/17 16:26:09,而部署到国外服务器得到的时间格式是:17/8 ...
- PHP分多步骤填写发布信息的简单方法实例代码
1.php 复制代码 代码如下: <form name=form1 id=form1 method=post action=2.php> 基本信息1:<input type=text ...
- Nginx+tomcat实现负载均衡的配置
Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK ...
- selenium+python自动化81-html报告优化(饼图+失败重跑+兼容python2&3)
优化html报告 为了满足小伙伴的各种变态需求,为了装逼提升逼格,为了让报告更加高大上,测试报告做了以下优化: 测试报告中文显示,优化一些断言失败正文乱码问题 新增错误和失败截图,展示到html报告里 ...
- 《OpenCL异构并行编程实战》补充笔记散点,第五至十二章
▶ 第五章,OpenCL 的并发与执行模型 ● 内存对象与上下文相关而不是与设备相关.设备在不同设备之间的移动如下,如果 kernel 在第二个设备上运行,那么在第一个设备上产生的任何数据结果在第二个 ...
- java递归之“二叉树”
物有本末,事有始终,知所先后,则近道矣.-----题记. BotWong半路入行it做码农,也就半年时间,竟“不知天高地厚”地来到了深圳闯天下.一口气投了百个简历,一周后终于有公司邀约面试,除了基础的 ...
- Yii中使用RBAC完全指南
开始准备 Yii提供了强大的配置机制和很多现成的类库.在Yii中使用RBAC是很简单的,完全不需要再写RBAC代码.所以准备工作就是,打开编辑器,跟我来.设置参数.建立数据库 在配置数组中,增加以下内 ...
- 可视化库-Matplotlib-3D图(第四天)
1. 画三维图片图 axes = Axes3D(fig)这一步将二维坐标转换为三维坐标,axes.plot_surface() import matplotlib.pyplot as plt impo ...