目录(?)[-]

  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. scala学习手记5 - 元组与多重赋值

    假定要在一个方法中返回多个值.比如需要返回一个人的名.姓和邮箱地址.在Java中最常用的方法是定义一个Person类,其中包括相对应的字段:还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循 ...

  2. Kubernetes 在知乎上的应用

    从 Mesos 到 Kubernetes 之前的调度框架是基于 Mesos 自研的.采用的语言是 Python.运行了大概两年多的时间了,也一直比较稳定.但随着业务的增长,现有的框架的问题逐渐暴露. ...

  3. 分分享知识-快乐自己: @Component注解的使用

    @controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 @service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 @repositor ...

  4. socket长连接和短链接区别

    短连接 连接->传输数据->关闭连接 HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束后就中断连接.短连接是指SOCKET连接后发送后接收完数据后马上断 ...

  5. 探究platform_driver中“多态”思想

    问题最初是下面的两段代码引出的: static struct platform_driver sonypi_driver = { .driver = { .name = "sonypi&qu ...

  6. IOS-支付宝

      一.使用支付宝进行一个完整的支付功能,大致有以下步骤: 与支付宝签约,获得商户ID(partner)和账号ID(seller) 下载相应的公钥私钥文件(加密签名用) 下载支付宝SDK 生成订单信息 ...

  7. CC 攻击检测研究现状

    网络层ddos 是让去往银行的道路交通变得拥堵,无法使正真要去银行的人到达:常利用协议为网络层的,如tcp(利用三次握手的响应等待及电脑tcp 连接数限制)等应用层ddos 则是在到达银行后通过增办. ...

  8. web前端概念摘要(一)

    1.前端不必等后端开发完成后才开发的情况:(1)前后端分离:前后端工程不在同一工程目录,前端专注页面样式与效果开发,设计数据展示等问题,可自行建立假数据或本地数据文件测试.后期联调再做修改,修改前端人 ...

  9. Ajax中的XMLHttpRequest对象详解(转)

    XMLHttpRequest对象是Ajax技术的核心.在Internet Explorer 5中,XMLHttpRequest对象以ActiveX对象引入,被称之为XMLHTTP,它是一种支持异步请求 ...

  10. Activity的基本概念与Activity的生命周期

    一.Activity的基本概念 Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用 ...