文档章节

BroadcastReceiver(广播接收者)

 梦想家Peng
发布于 2016/03/03 10:02
字数 795
阅读 66
收藏 0
点赞 1
评论 0

BroadcastReceiver是Android系统的核心组件。

广播是一种通信机制,广播的发送方可以发出广播,而另一端可以使用接收者接收该广播,接收到了以后决定相应的处理。

发广播可以使用sendBroadcast(Intent intent)方法实现,该方法是由ContextWrapper定义的。

在发送广播时,需要在Intent对象中配置Action属性,类似于生活中的广播的“频道号”

广播的接收需要自定义类继承BroadcastReceiver来实现,该自定义类可以是内部类。

注册广播接收者可以在程序代码中进行注册,调用registerReceiver(BroadcastReceiver recevier, IntentFilter filter)即可实现注册,注册时,参数IntentFilter中应该通过addAction()方法添加所有需要接收的广播中Intent携带的Action属性。

发送广播:

Intent it = new Intent();
it.setAction("cn.tedu.player.intent.action.PREVIOUS");
sendBroadcast(it);

接收广播:

private class InnerBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if("cn.tedu.player.intent.action.PLAY".equals(action)) {
            // PLAY
            Log.d("media store", "PlayMusicService$InnerBroadcastReceiver.onReceive() -> PLAY");
        } else if("cn.tedu.player.intent.action.PREVIOUS".equals(action)) {
            // PREVIOUS
            Log.d("media store", "PlayMusicService$InnerBroadcastReceiver.onReceive() -> PREVIOUS");
        }
    }
}

发广播:sendBroadcast(Intent intent)

收广播:继承BroadcastReceiver并注册,重写onReceive(Context context, Intent intent)方法

【广播的类型】

1) 普通广播:广而播之,通过sendBroadcast()发送广播

2) 有序广播:传话,通过sendOrderedBroadcast()发送广播,在广播传递的过程中,任何一个接收者都可以调用abortBroadcast()方法以终止广播的传递,并且可以通过setResultXXX()系列方法封装数据,后续的广播接收者则可以通过getResultXXX(0方法获取数据。

【有序广播的接收者们的优先级】

1. 有序广播的接收者们可以在匹配的IntentFilter中配置priority属性,表示优先级,取值为int类型的数值,数值越大,则优先级越高,就会更优先收到广播,反之,数值越小,优先级越低,就更后收到广播

2. 当priority属性的值相同时,如果注册方式不同,则动态注册的广播接收者优先级更高,静态注册的广播接收者优先级更低

3. 当priority属性的值相同时,并且注册方式也相同时,按照注册的先后顺序来区分,即根据registerReceiver()方法的调用顺序,或在AndroidManifest.xml文件中<receiver>节点的顺序来排列,越靠前的优先级越高。如果不同的应用程序都使用静态注册的广播接收者,且优先级相同时,按照应用程序的包名按照字典排序法排序。

【广播注册】

1) 动态注册:在类中使用registerReceiver(BroadcastReceiver receiver, IntentFilter filter)注册,并在类被销毁之前使用unregisterReceiver(BroadcastReceiver receiver)取消注册。

2) 静态注册:在AndroidManifest.xml文件中注册。

【注册方式的区别】

1) 以内部类形式存在的广播接收者只能使用动态注册,而一般的广播接收者类可以使用任何一种方式进行注册

2) 动态注册是临时的,静态注册是常驻的。

eg:

注册广播托收者

// 注册广播接收者
receiver = new InnerBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_SHOW_PLAY);
filter.addAction(ACTION_SHOW_PAUSE);
registerReceiver(receiver, filter);


© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 33
码字总数 15605
作品 0
深圳
android 广播接收者--BroadcastReceiver

BroadcastReceiver初识: 广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广播...

长平狐 ⋅ 2012/09/03 ⋅ 0

Android 四大组件(四)BroadcastReceiver

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/75449100 Andorid四大组件Activity、Service、ContentProvider都已经总结了,详情可以参考如下: Android 四大组件(一...

VNanyesheshou ⋅ 2017/07/20 ⋅ 0

基础总结篇之五:BroadcastReceiver应用详解(一)

今天我们来讲一下Android中BroadcastReceiver的相关知识。 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方...

andy521zhu ⋅ 2015/04/02 ⋅ 0

android广播和短信广播详解----使用广播接收者窃听短信

当系统收到短信时,会发出一个action名称为android.provier.Telephony.SMS_RECEIVED的广播Intent,该Intent存放了接收到的短信内容,使用名称 “pdus”即可从Intent中获取短信内容。 pdus是一...

程序袁_绪龙 ⋅ 2014/09/28 ⋅ 0

BroadCastReceiver

BroadcastReceiver   在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。 下面将详细的阐...

攀爬的小瓜牛 ⋅ 2014/09/04 ⋅ 0

广播 (Broadcast)

广播 :在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。我们拿广播电台来做个比方。我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们...

切切歆语 ⋅ 2016/11/02 ⋅ 0

广播发送者&广播接收者介绍

1.广播接收者 广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context,Intent intent),其中intent可以获得传递的数...

程序袁_绪龙 ⋅ 2014/10/28 ⋅ 0

BroadcastReceiver—使用(II)

广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用 Context.sendBroadcast() 、 Context.sendOrderedBroadcast() 来实现的。通常一个广播 Intent 可以被订...

zt1212 ⋅ 2012/10/12 ⋅ 0

总结全面的广播机制

BroadCastReceiver 源码位于: framework/base/core/java/android.content.BroadcastReceiver.java 广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用 ......

天高空 ⋅ 2012/03/20 ⋅ 1

安卓系列七(广播机制)

一、什么是广播接收者 广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广播I...

火龙战士 ⋅ 2015/02/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

R计算IV

参考文章 #读取文件 rawdata = read.csv("/path/to/csv/file",header=T) colnames(rawdata)[18] <- "y" //重命名因变量y #数据分区 训练集测试集 trainIdx <- sample(nrow(rawdata), round(......

火力全開 ⋅ 16分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

阿里云云栖社区 ⋅ 16分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

猫耳m ⋅ 27分钟前 ⋅ 0

关于ireport自定义变量类型为list的时候

自己摸石头过河,我真的应该去趟市中心图书馆,借本真正靠谱的教材 网上的东西,只有0.01%是有用的,还有0.99%是垃圾,剩下的99%是垃圾的复制品。。 哎!~ 问题是这样的,报表带sql,从db中获...

炑炑milina ⋅ 27分钟前 ⋅ 0

Spring mvc ContextLoaderListener 原理解析

对于熟悉Spring MVC功能,首先应从web.xml 开始,在web.xml 文件中我们需要配置一个监听器 ContextLoaderListener,如下。 <!-- 加载spring上下文信息,最主要的功能是解析applicationContex...

轨迹_ ⋅ 28分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云官方博客 ⋅ 30分钟前 ⋅ 0

Redis安装异常解决办法

官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxvf redis-2.8.17.tar.gz 3. 进入解压缩后的文件夹:c...

slagga ⋅ 34分钟前 ⋅ 0

006. 深入JVM学习—年轻代

1. 年轻代图片 年轻代(Young)属于JVM堆内存空间的一个组成部分 所有使用关键字new新实例化的对象一定会在伊甸园区进行保存,而对于存活区保存的一定是已经在伊甸园区存在一段时间并且经过了...

影狼 ⋅ 35分钟前 ⋅ 0

如何成为一个合格的程序员

偶尔的,我会被人问道:如何成为一名优秀的程序员,更或者,如何成为一名程序员。每次人们问起,我都力图给出不同的答案。因此,我的答案是各种各样的。下面就是我认为的成为一名优秀的程序员...

柳猫 ⋅ 36分钟前 ⋅ 0

cups error_log日志暴增

日志内容 File \"/usr/lib/cups/notifier/dbus\" has insecure permissions 解决(未验证适用范围) sudo service cups stopsudo rm /etc/cups/subscriptions.conf*sudo rm -r /var/cac......

一介码夫_Hum ⋅ 39分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部