目录(?)[-]

  1. 基础小例子
  2. 发送Broadcast intent
  3. 运行情况
  4. 应用间的广播

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处: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):基础小例子的更多相关文章

  1. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

  2. 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...

  3. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

  4. 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode

    目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...

  5. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

  6. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

  7. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  8. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

  9. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...

  10. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

随机推荐

  1. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体

    1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...

  2. mysql数据库优化课程---6、mysql结构化查询语言有哪些

    mysql数据库优化课程---6.mysql结构化查询语言有哪些 一.总结 一句话总结:主要分为四类 1.DCL 数据控制语言1)grant2)commit3)rollback 2.DDL 数据定义语 ...

  3. day5-随机数相关:random模块&string模块

    一.概述 随机数在程序设计中的属于比较基础的内容,主要用于验证场景(如验证码,生成账号对应的密码等),今天结合random模块和string模块来谈谈python中随机数那些事儿. 二.随机数实现相关 ...

  4. html03表单

    <!DOCTYPE HTML> <html> <head> <title>用户登录的表单</title> </head> < ...

  5. SpringCloud教程 | 第十一篇: docker部署spring cloud项目

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://blog.csdn.net/forezp. http://blog.csdn.net/forezp/art ...

  6. CSS: transitions

    CSS Transitions CSS transitions allows you to change property values smoothly (from one value to ano ...

  7. Castle IOC概念理解

    最近在用Castle,里面有些概念比较容易混淆,特此解释一下: 1. 容器(Container):Windsor是一个反转控制容器.它创建在一个微内核的基础之上,这个微内核能够扫描类并且试图找到这些类 ...

  8. 毕业生、程序猿转岗该如何选择Java、大数据和VR?答案在这里!

    许久不见的朋友请我吃饭,期间给我介绍他一个弟弟,说明年要毕业了,还不知道找啥工作,说有培训机构让他学VR.大数据什么的,不知道前景咋样,想咨询一下我.相信很多朋友面临毕业,都不知道该从事哪个行业,自己 ...

  9. HTTP 方法:GET与 POST

    什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信. HTTP 的工作方式是客户机与服务器之间的请求-应答协议. web 浏览器可能是客户端,而计算机上的网络应用程 ...

  10. 好强大的页面功能调试(js调试,查找js绑定的事件)值得学习

    引自:http://www.poluoluo.com/jzxy/201209/178110_2.html 这篇文章是根据目前 chrome 稳定版(19.0.1084.52 m)写的,因为 googl ...