【转】 Pro Android学习笔记(九七):BroadcastReceiver(1):基础小例子
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处:http://blog.csdn.net/flowingflying/
和activity、content provider以及service一样,BraodcastReceiver是Android的组件。广播接收器接收广播消息,并进行相应地处理。广播消息就是Android的broadcast intent。一个broadcast intent可以触发多个接收器。
基础小例子
小例子很简单,通过菜单触发发送Broadcast,然后通过Logcat观察接收器情况。
发送Broadcast intent
private void sendBroadcast(){
//为了保证action的唯一性,通常采用包名的namespace。
String actionString = "cn.flowingflying.proandroid.testbrocastreceiver.intent.testbc";
Intent bcIntent = new Intent(actionString);
bcIntent.putExtra("message", "No " + (count ++));
Log.v("Main","Before send");
//组件(acivity或者service)使用sendBrocast()进行发送广播消息,参数则是intent。
sendBroadcast(bcIntent);
Log.v("Main","After send");
}
Broadcast接收器
接收器实现很简单,继承BroadcastReceiver,同时要在manifest文件中通过<receiver>的tag来注册要监听的广播intent,我们也可以在运行时在代码中进行注册。
public class TestReceiver extends BroadcastReceiver{
private String tag = "TestReceiver";
@Override //收到广播的回调函数
public void onReceive(Context context, Intent intent) {
Utils.logThreadSignature(tag); //显示Thread的信息
Log.v(tag,"context = " + context);
Log.v(tag,"this = " + this);
Log.v(tag,"intent = " + intent);
String message = intent.getStringExtra("message");
Log.v(tag,"message : " + message);
}
}
需要通过AndroidManifest.xml告诉系统需要接受broadcast消息。<receiver>和其他组件一样是<application>的node。
<receiver android:name=".TestReceiver">
<intent-filter >
<action android:name="cn.flowingflying.proandroid.testbrocastreceiver.intent.testbc" />
</intent-filter>
</receiver>
运行情况
我们看看运行的接口,接收器运行在主线程中。

广播是可以被多个接收器接收的,我们copyTestReceiver的代码创建另一个接收器TestReceiver2,如下,并在AndroidManifest.xml中进行注册:
public class TestReceiver2 extends BroadcastReceiver{
private String tag = "TestReceiver2";
@Override
public void onReceive(Context context, Intent intent) {
Utils.logThreadSignature(tag); //显示Thread的信息
Log.v(tag,"context = " + context);
Log.v(tag,"this = " + this);
Log.v(tag,"intent = " + intent);
String message = intent.getStringExtra("message");
Log.v(tag,"message : " + message);
}
}
运行结果如下。当发出广播时,所有注册的接收器都会收到。由于这两个接收器的onReceive()都运行在主线程,即同一个线程中,他们是顺序处理,而不是另行处理。可以猜测广播是放在消息队列中,处理时依次触发各接收器。我们可以将TestReceiver的处理时间增加,例如sleep()上几秒,依次处理会更明显。处理的顺序和Manifest中的登记顺序一致。

应用间的广播
同一应用和不同应用都可以通过Manifest注册对同一广播的监听,在代码上区别,分别触发运行在各自的主线程的回调函数。
小例子代码在:Pro Android学习:Broadcast小例子
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(九七):BroadcastReceiver(1):基础小例子的更多相关文章
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
随机推荐
- Spring -- spring整合struts2
1. 概述 spring和struts整合: 1.创建web程序 2.引入struts2类库. 3.创建HelloWorldAction package cn.itcast.struts2.actio ...
- node-wechat 微信推送消息
https://github.com/nswbmw/node-wechat/blob/master/index.js
- ycsb两个阶段说明
ycsb有几个目录需要注意下: bin: - 目录下有个可执行的ycsb文件,是个python脚本,是用户操作的命令行接口.ycsb主逻辑是:解析命令行.设置java环境,加载java-libs,封 ...
- opencv:图像模糊处理
接口: blur(sourceImage,dstImage,Size(,)); // 图像模糊处理 示例代码: #include <opencv.hpp> #include <img ...
- 硬链接、软链接和inode
一.inode 在Linux中,“一切皆文件”. 唯一标识文件的是inode而非文件名,文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 寻找正确的文件数据块. 什么是数据块呢?文件储存 ...
- Struts11---文件上传
01.创建对应的上传页面 <body> <form action="user/upload" method="post" enctype=&q ...
- h5使用模块模板,循环输出模块列表
博主使用freemarker为框架,不过不影响功能的说明,首先来看看成品效果图 然后是html [#import "/common/layout.ftl" as layout] [ ...
- New Concept English three (26)
34w/m 54words No one can avoid being influenced by advertisements. Much as we may pride ourselves on ...
- vim技巧记录
安装插件 有个很好的同志已经做了一个比较全的插件集,下载就可以用: mv ~/.vimrc ~/.vimrcbak mv ~/.vim ~/.vimbak git clone https://gith ...
- [置顶]
Android RadioButton与TextView浪漫约会?
情景一 今天主要实现一个国家与地区切换,就是当我们选中RadioButton时然后将值设置到TextView中,听着这需求应该不难对吧?那么我们就开始约会吧? 看下原型图 准备条件: 首先需要一个ra ...