《深入理解Android:Telephony原理剖析与最佳实践》一3.4 广播

3.4 广播

广播(Broadcast),看字面意思可以联想到车站、商场等都有广播,对于广播来说,发送方并不需要知道广播接收方的数量及接收到广播如何反应,这些都是接收方的事。那么,在Android 平台中的广播是否与生活中的广播相似呢?答案是肯定的,发送方仅需要将广播内容完成发送,而接收方过滤自己需要的广播信息和内容,然后进行处理,接收方信息是发送方不知道的。

3.4.1 Android 系统中的广播

Android 系统中有非常多的广播,当系统启动或应用运行时便会向 Android 注册各种广播,Android 系统接收到广播后,会判断哪种广播需要哪种事件。广播事件的筛选由Android 系统完成,在接收广播时,程序员仅需要定义广播的过滤器,即接收什么样的广播内容。
从定义来讲,广播主要分发送方和接收方,Android中的广播也是如此。Android中广播的接收方处理逻辑相对复杂一些,首先要注册广播过滤器并继承abstract class BroadcastReceiver实现广播接收的onReceive方法。

3.4.2 Broadcast接收

首先创建自己的Broadcast广播接收类MyRecvBroadcast,可以不依赖Activity,其代码详情如下:

public class MyRecvBroadcast extends BroadcastReceiver {
    //Android工程中的任何类,继承BroadcastReceiver类,并覆盖onReceiver方法
    @Override
    public void onReceive(Context context, Intent intent) {
        StringBuffer str = new StringBuffer("Recive Broadcast action:");
        str.append(intent.getAction());
        str.append(", Message:");
        str.append(intent.getStringExtra("message"));
        System.out.println(str);
    }
}

Android中主要采用两种方式增加广播过滤器。
1)在广播接收方应用的AndroidManifest.xml配置信息文件中增加过滤信息和内容,在application节点中加入如下XML配置信息:

<receiver android:name="com.myandroid.MyRecvBroadcast">
    <intent-filter>
        <action android:name="static_broadcast" />
    </intent-filter>
</receiver>

2)在程序中通过代码增加广播过滤信息和内容,这些代码可以在Application或Activity的onCreate增加广播过滤器的注册,但同时需要注意在对应的生命周期里注销Broadcast的广播过滤器,可参考如下代码内容:

IntentFilter intentfilter = new IntentFilter();//Intent过滤器
intentfilter.addAction("dynamic_broadcast");//过滤器增加Intent过滤内容
MyRecvBroadcast mrb = new MyRecvBroadcast();
registerReceiver(mrb, intentfilter);//向系统注册MyRecvBroadcast广播接收器及Intent过滤器

3.4.3 Broadcast发送

广播发送有三种形式,即sendBroadcast ()、sendOrderedBroadcast()、sendStickyBroadcast()。我们重点看sendBroadcast方式,发送广播的代码如下:

Intent intent = new Intent();           //广播均通过Intent进行发送
intent.setAction("dynamic_broadcast");  //Action类型,接收方可通过Action类型进行过滤
intent.putExtra("message", "send broadcast");//广播数据
sendBroadcast(intent);          //发送广播
intent.setAction("static_broadcast");
intent.putExtra("message", "send broadcast");
sendBroadcast(intent);

Broadcast相比Handler异步消息处理、AIDL跨应用服务访问要简单得多,这是由广播的特性决定的。广播只管发,不管接收方及相关处理,并且在Android中广播的具体实现已经交给了系统来完成。

时间: 2024-10-03 21:18:41

《深入理解Android:Telephony原理剖析与最佳实践》一3.4 广播的相关文章

《深入理解Android:Telephony原理剖析与最佳实践》一导读

前 言 随着ICT技术的推广和发展,在三网融合.智慧的地球(物联网)等概念风行的形势下,手机终端技术的发展和进步可谓日新月异:Android经受住了市场的考验,并占据了较大的市场份额,从手机芯片厂家.手机生产厂家到各种应用开发公司.互联网公司等,逐步形成了以Android系统平台为核心的上下游产业链.正是由于Android源代码的开源,各大手机厂商才能通过深度定制Android系统平台,在降低研发成本的同时,快速推出具有自身特色的Android智能手机产品.因此,各大手机厂家在推出新版本Andr

《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构

1.3 Android Telephony框架结构 前面对Android手机操作系统整体框架结构及每一层进行了简单的分析和说明,相信大家对Android智能手机操作系统有了一些基本的了解和认识.结合前面Android的系统整体框架,我们接着学习Android Telephony涉及的框架结构,如图1-3所示. 通过图1-3所示不难发现Android Telephony框架结构的一些规律,总结如下. Android Telephony的业务应用跨越了AP和BP.AP与BP相互通信,符合前面介绍的智

《深入理解Android:Telephony原理剖析与最佳实践》一3.5 本章小结

3.5 本章小结 本章主要对Android Telephony相关模块使用到的一些关键技术进行了分析和实例讲解,包括Handler.Broadcast两种异步通信的机制和AIDL跨应用的服务调用.Handler主要有几种消息处理方式?Handler对象的创建在主线程和子线程有什么区别?AIDL如何定义接口?AIDL接口定义完成后,对应的代码是如何生成的?Broadcast接收方的过滤器有几种设置方式?通过本章的学习,相信大家都对这些知识点会有较深入的认识和理解. 对Android中的Handle

《深入理解Android:Telephony原理剖析与最佳实践》一3.3 AIDL跨应用服务

3.3 AIDL跨应用服务 Android Telephony框架层提供了一些AIDL系统服务以及第三方应用,通过这些系统服务可方便地获取手机当前状态,如待机状态.通话中.来电等,这些状态在Android手机应用开发中非常重要.如果我们开发一款Android平台的手机音乐播放器,在使用音乐播放器的过程中需要知道手机当前是什么状态,如果是通话中或来电,这时就必须暂停播放音乐. 3.3.1 AIDL概念分析 什么是AIDL呢?AIDL的Android官方定义如下: AIDL (Android Int

《深入理解Android:Telephony原理剖析与最佳实践》一3.1 何为同步和异步

3.1 何为同步和异步 Android Telephony相关应用中,Telephony大量使用了Handler.Broadcast等通信方式,而在Android操作系统平台中的Handler消息处理.Broadcast广播消息等均采用异步通信机制,那么我们首先要清楚什么是异步通信机制,与它相对同步的通信机制是什么,有什么区别. Synchronous(同步)和Asynchronous(异步)的概念最早来自通信领域. 通信的同步:指客户端在发送请求后,必须要在服务端有回应后客户端才继续发送其他请

《深入理解Android:Telephony原理剖析与最佳实践》一第2章 搭建Android源代码编译环境

第2章 搭建Android源代码编译环境 第1章介绍了Android以及其Telephony功能模块的基本结构,在本章中将带着读者去搭建Android编译环境.即使你已经能够在自己计算机上成功编译Android源代码了,也希望你能阅读本章内容,因为本章不乏一些技巧的总结和Android相关实用工具使用方法的介绍. Android的编译环境作为深入学习Android的基础,不可缺失,能够成功下载Android源代码并编译成功,对深入学习Android是非常关键和重要的一步:Android环境搭建比

《深入理解Android:Telephony原理剖析与最佳实践》一第3章 主要技术准备

第3章 主要技术准备 第2章介绍了搭建Android源码编译环境以及Android相关常用工具使用的一些技巧和总结,接下来我们是不是应该开始学习Android Telephony相关内容了呢?先不着急,工欲善其事,必先利其器,我们还要做一些的技术准备工作,也就是学习Android Telephony涉及的一些关键技术,其中包括Handler消息处理机制.AIDL跨应用服务访问和Broadcast系统广播.这些技术在Telephony中使用较多,所以在学习Telephony前,需要对这几个重点技术

《深入理解Android:Telephony原理剖析与最佳实践》一2.1 Ubuntu Linux操作系统及工具安装

2.1 Ubuntu Linux操作系统及工具安装 要搭建Android的编译环境,首先要选择好使用什么操作系统.本书选择Ubuntu 10.10桌面版64位Linux操作系统作为编译Android源码的操作系统. 注意 为什么选择使用64位Ubuntu 10.10桌面版的操作系统呢?在搭建Android源代码编译环境的过程中通过对比Ubuntu 10版本和11版本,发现Ubuntu 10更加简单,比如在Ubuntu 11.10采用的GCC和G++ 4.6版本,需要回退到4.4版本,否则会出现编

《深入理解Android:Telephony原理剖析与最佳实践》一第1章 初识Android

第1章 初识Android Android中文意思为"机器人",中文翻译为"安卓",是Google于2007年11月5日发布的基于Linux平台的开源手机操作系统的名称.该平台由操作系统.中间件.用户界面和应用软件组成,被称为首个为移动终端打造的真正开放和完整的移动软件.Google与电信运营商.手机设备制造商.芯片开发商以及其他有关方面结成深层次的合作伙伴关系,希望借助建立标准化.开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统. 从2007年到现在

《深入理解Android:Telephony原理剖析与最佳实践》一1.2 Android系统架构

1.2 Android系统架构 前面学习了智能手机的基本硬件结构,可以通过功能手机与智能手机的特点和区别从本质上认识它们.Android智能手机操作系统作为运行在AP上的开源智能手机操作系统,其系统架构是什么样的呢?我们先看看图1-2. 通过图1-2不难发现,Android手机操作系统是一个基于Linux Kernel的分层智能手机操作系统,其共分为4层,从上到下分别是Java Applications(应用层).Java Frameworks(应用框架层).User Libraries(系统运