Android-无序广播
在之前的博客,Android-广播概念,中介绍了(广播和广播接收者)可以组件与组件之间进行通讯,有两种类型的广播(无序广播 和 有序广播),这篇博客就来讲解无序广播的代码实现:
无序广播:接收者 同时接收到,没有顺序,所以叫无序广播
1.点击按钮发送广播出去,---> 给广播接收者,广播接收者需要订阅才能接收得到:
AndroidManifest.xml方式订阅 接收者
<!--
订阅(Xml形式订阅接收者)
注意:订阅的是接收者,和广播发送没有半毛钱关系
-->
<receiver android:name=".MyBroadcastReceiver"> <intent-filter>
<!-- Action这是必写的 -->
<action android:name="my.MyBroadcastReceiver.custom.action" /> <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
<data android:scheme="EXO" /> <!-- 注意:这里不能加 : --> </intent-filter> </receiver>
定义 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, "intent.getAction():" + intent.getAction());
Log.d(TAG, "intent.getDataString():" + intent.getDataString());
}
}
2.发送广播
注意:发送广播的原则:接收者怎么订阅的,我就怎么发送send:
/**
* 发送无序广播
* @param view
*/
public void sendDisorderBroadcast(View view) {
/**
* 接收者是这样订阅的:
* <intent-filter>
* <!-- Action这是必写的 -->
* <action android:name="my.MyBroadcastReceiver.custom.action" />
*
* <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
* <data android:scheme="EXO" /> <!-- 注意:这里不能加 : -->
*
* </intent-filter>
*/
Intent intent = new Intent();
intent.setAction("my.MyBroadcastReceiver.custom.action");
intent.setData(Uri.parse("EXO:")); // 注意:要加 :
sendBroadcast(intent);
}
Log日志打印:
12-17 07:15:47.317 2358-2358/liudeli.croadcast1 D/MyBroadcastReceiver: intent.getAction():my.MyBroadcastReceiver.custom.action
12-17 07:15:47.317 2358-2358/liudeli.croadcast1 D/MyBroadcastReceiver: intent.getDataString():EXO:
第二种方式订阅接收者(Java代码中订阅),比AndroidManifest.xml更加灵活
private MyBroadcastReceiver myBroadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
/**
* 【Java代码方式订阅 接收者】
* 唯一可以new的组件就是 广播 接收者
*/
myBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("my.MyBroadcastReceiver.custom.action2");
intentFilter.addDataScheme("Beyond"); // 注意:这里不能加 :
registerReceiver(myBroadcastReceiver, intentFilter);
}
/**
* 发送无序广播
*/
public void sendDisorderBroadcastJava(View view) {
/**
* 接收者是这样订阅的:怎么订阅,就怎么发送
* IntentFilter intentFilter = new IntentFilter();
* intentFilter.addAction("my.MyBroadcastReceiver.custom.action2");
* intentFilter.addDataScheme("Beyond"); // 注意:这里不能加 :
*/
Intent intent = new Intent();
intent.setAction("my.MyBroadcastReceiver.custom.action2");
intent.setData(Uri.parse("Beyond:香港著名殿堂级乐队灵魂人物黄家驹")); // 注意:要加 :
intent.putExtra("music", "海阔天空 作词作曲 黄家驹");
sendBroadcast(intent);
}
/**
* Java方式订阅接收者后 必须要解除订阅
*/
@Override
protected void onDestroy() {
super.onDestroy();
if (myBroadcastReceiver != null)
unregisterReceiver(myBroadcastReceiver);
}
定义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, "intent.getAction():" + intent.getAction());
Log.d(TAG, "intent.getDataString():" + intent.getDataString()); // 真实开发中是这样写的
if ("my.MyBroadcastReceiver.custom.action2".equals(intent.getAction())) {
String data = intent.getDataString();
String[] dataArray = data.split(":");
Log.d(TAG, "data:" + dataArray[1]);
Log.d(TAG, "music:" + intent.getStringExtra("music"));
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
} else if ("xxx.action".equals(intent.getAction())) {
// 做相应的业务逻辑处理
// ...
}
}
}
Log日志打印:
12-17 07:37:24.002 3214-3214/liudeli.croadcast1 D/MyBroadcastReceiver: intent.getAction():my.MyBroadcastReceiver.custom.action2
12-17 07:37:24.002 3214-3214/liudeli.croadcast1 D/MyBroadcastReceiver: intent.getDataString():Beyond:香港著名殿堂级乐队灵魂人物黄家驹
12-17 07:37:24.002 3214-3214/liudeli.croadcast1 D/MyBroadcastReceiver: data:香港著名殿堂级乐队灵魂人物黄家驹
12-17 07:37:24.002 3214-3214/liudeli.croadcast1 D/MyBroadcastReceiver: music:海阔天空 作词作曲 黄家驹
AndroidManifest.xml订阅方式 与 Java订阅方式,是一样的,只是代码语法稍微有点差别而已:
/**
* 【Java代码方式订阅 接收者】
* 唯一可以new的组件就是 广播 接收者
*/
myBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("my.MyBroadcastReceiver.custom.action2");
intentFilter.addDataScheme("Beyond"); // 注意:这里不能加 :
registerReceiver(myBroadcastReceiver, intentFilter);
<!--
订阅(Xml形式订阅接收者)
注意:订阅的是接收者,和广播发送没有半毛钱关系
-->
<receiver android:name=".MyBroadcastReceiver"> <intent-filter>
<!-- Action这是必写的 -->
<action android:name="my.MyBroadcastReceiver.custom.action" /> <!-- 这个可有可无,一旦加了,发送者也必须要设置 -->
<data android:scheme="EXO" /> <!-- 注意:这里不能加 : --> </intent-filter> </receiver>
Android-无序广播的更多相关文章
- Android(java)学习笔记179:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)
之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播: 1. 我们首先了解一下有序广播和无序广播区别和联系? (1) 有序广播> 接受者 ...
- Android(java)学习笔记122:BroadcastReceiver之 有序广播和无序广播(BroadcastReceiver优先级)
之前我们在Android(java)学习笔记178中自定义的广播是无序广播,下面我们要了解一下有序广播: 1. 我们首先了解一下有序广播和无序广播区别和联系? (1)有序广播> 接受者有优先级, ...
- Android的有序广播和无序广播(解决安卓8.0版本之后有序广播的接收问题)
前言 Google从Android8.0版本开始,对在清单文件中静态注册广播做了限制. *** 特殊广播(动态注册广播接收者) 说:有序广播和无序广播之前,咱们先来说下Android中一些特殊的广播如 ...
- Android study --- 广播
广播接收者 在Android系统运行时会产生很多事件,事件产生时,回想系统发送广播,只要向系统发送广播,系统就知道发生了相应的事件,从而执行相对应的代码.在系统中只要使用广播接受者,就可以接收广播 创 ...
- BroadcastReceiver之发送自定义无序广播
首先,发送一个自定义广播:(用sendBroadcast(intent)发送一条无序广播) public void click(View v){ Intent intent = new Intent( ...
- Android BroadcastReceiver广播接受者
静态注册 配置清单表注册:只要曾经注册过哪怕关闭也能调用 方式一:sendBroadCastReceive 广播的步骤: 发送 无序广播,普通广播 (1).发送方 ...
- android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播
* 添加权限 <uses-permission android:name="android.permission.RECEIVE_SMS"/> * 4.0以后广播接收者 ...
- 17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限
1 Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2 广播被分为两种不同的类型:"普通广播( ...
- Android中广播接收者BroadcastReceiver详解
1. 接收系统的广播步骤 (1) 新建一个类继承BroadcastReceiver 以监听sd卡状态的广播接收者为例 public class SdCardBroadcastReceiver ext ...
- 【Android】广播BrocastReceiver
1.Android中广播主要分为两种:标准广播和有序广播. 标准广播:完全异步执行.广播发出后,所有的广播接收器几乎在同一刻收到广播事件,没有先后顺序之分. 优点:效率高 缺点:不能被截断 有序广播: ...
随机推荐
- 黄聪:360浏览器、chrome开发扩展插件教程(3)关于本地存储数据
转载:http://www.cnblogs.com/walkingp/archive/2011/04/04/2003875.html HTML5中的localStorage localStorage与 ...
- mac电脑 pip安装包后 撞到了系统python里面的解决方法
/usr/local/Cellar/python@2/2.7.14_3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-pack ...
- app测试笔记记录
1. 個性簽名保存成功,toast提示“儲存成功” 解释: Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过 ...
- cuDNN下载地址和指南
我出现了报错 Could not find 'cudnn64_7.dll'. TensorFlow requires that this DLL be installed in a directory ...
- php删除制定文件及文件夹
php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用. 用到的函数: scandir($path) 遍历一个文件 ...
- 转帖:关于MongoDB你需要知道的几件事
Henrique Lobo Weissmann 是一位来自于巴西的软件开发者,他是 itexto 公司的联合创始人,这是一家咨询公司.近日,Henrique 在博客上撰文谈到了关于 MongoDB 的 ...
- Bootstrap的介绍和响应式媒体查询
Bootstrap的介绍 凡是使用过Bootstrap的开发者,都不在乎做这么两件事情:复制and粘贴.哈哈~,是的使用Bootstrap非常简单,但是在复制粘贴之前,需要先对Bootstrap的用法 ...
- django-中间件,流量统计实例
Django中间件(Middleware) 中间件,顾名思义,就是处在中间的一些软件.比如匹配到了URL,但是还没有执行view函数的时候,这个时候可以执行一些代码,这个代码就是中间件. HttpRe ...
- 33_java之类加载器和反射
01类加载器 * A.类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. * a 加载 * 就是指将class文件读入内存,并为之 ...
- linux中用date命令获取昨天、明天或多天前后的日期
转自:http://www.linuxde.net/2011/10/1033.html 在实际操作中,一些脚本中会调用明天,或者昨天,或更多天前的日期,本文将叙述讲述用date命令实现时间的显示.在L ...