文档章节

Android广播机制

程序袁_绪龙
 程序袁_绪龙
发布于 2014/09/26 13:35
字数 1007
阅读 89
收藏 1
点赞 0
评论 0

首先问一下什么叫广播?

其实在学习android广播机制之前我一直以为广播就是类似于计算机网络里面的广播。如果这么想就打错特错了,Android广播机制指的是,在一个应用程序运行的时候可以自定义一个消息类型,让相应的接收器去处理这个消息或者是系统消息,比如来电话了、来短信了、手机没电了等等系统发送的消息。系统发送的消息也可以通过广播的方式通知给应用程序,这样子就避免了新开一个Thread去监听系统或其他应用发送过来的消息的状态。

Android广播的分类:

1、 普通广播:这种广播可以依次传递给各个处理器去处理

2、 有序广播:这种广播在处理器端的处理顺序是按照处理器的不同优先级来区分的,高优先级的处理器会优先截获这个消息,并且可以将这个消息删除

3、 粘性消息:粘性消息在发送后就一直存在于系统的消息容器里面,等待对应的处理器去处理,如果暂时没有处理器处理这个消息则一直在消息容器里面处于等待状态。

注意:普通广播和粘性消息不同被截获,而有序广播是可以被截获的

处理器的注册:

1、 在代码中用函数代码动态的方式注册。动态注册的处理器必须用代码动态的销毁,每次用来处理消息的就一个实例对象

2、 在配置文件里面静态注册,静态注册有个特点,那就是一旦注册就会一直存在于系统里面,无论应用是否关闭或开关机。(简直就是一个流氓软件病毒啊~)。静态注册每次有处理消息就由系统new一个处理器处理,并销毁

下面具体看看Android广播消息的发送、注册、处理过程:

① 自定义处理器类:

?

public class MyBroadcastReceiver4 extends BroadcastReceiver {
public MyBroadcastReceiver4() {
System.out.println( "创建了一个由registerReceiver()注册的广播接收器" );
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
System.out.println( "MyBroadcastReceiver4收到了一个" + action + "消息" );
if (isOrderedBroadcast()) {
System.out.println( "这是一个有序广播,已经被拦截了。" );
this .abortBroadcast();
} else {
System.out.println( "这不是一个有序广播" );
}
Bundle bundle = intent.getExtras();
if (bundle != null ) {
System.out.println( "该消息携带的数据如下:" );
// 获得bundle的一个key的集合
Set set = bundle.keySet();
// 获得上述集合的迭代器
Iterator iterator = set.iterator();
// 用迭代器遍历集合
while (iterator.hasNext()) {
// 取得集合中的一个内容
String str = (String) iterator.next();
// 取得Bundle中的内容
System.out.println(str + "--->" + bundle.get(str));
}
} else {
System.out.println( "该消息没有携带数据" );
}
Toast toast = Toast.makeText(context, "MyBroadcastReceiver4收到了一个"
+ action + "消息" , Toast.LENGTH_LONG);
toast.show();
//将这个消息截获(从消息容器移除)这样其他处理器就没法接收到这个消息
this .abortBroadcast();
}
}

② 发送广播消息

⑴、 发送普通广播:

// 发送一个普通消息

Intent intent = new Intent(); intent.setAction("asdfasdf");

Android_09_10Activity.this.sendBroadcast(intent);

⑵、 发送有序广播:

// 发送一个有序消息

Intent intent = new Intent();

intent.setAction("asdfasdf"); Android_09_10Activity.this.sendOrderedBroadcast(intent,

null);

⑶、 发送粘性广播:

// 发送一个粘性消息

Intent intent = new Intent();

intent.setAction("qwerqwer"); Android_09_10Activity.this.sendStickyBroadcast(intent);

③ 注册广播接收器

⑴动态注册:

// 注册一个广播接收器

IntentFilter intentFilter = new IntentFilter("asdfasdf");

intentFilter.setPriority(0);

Android_09_10Activity.this.registerReceiver(mbr2,

intentFilter);

⑵静态注册:

?

<receiver android:name= ".MyBroadcastReceiver4" >
<intent-filter android:priority= "1000" >
<action android:name= "android.intent.action.WALLPAPER_CHANGED" />
<action android:name= "android.provider.Telephony.SMS_RECEIVED" />
<action android:name= "android.intent.action.PHONE_STATE" />
<action android:name= "android.intent.action.PACKAGE_REMOVED" />
//这一句比较特殊,是上面那个广播消息特有的
<data android:scheme= "package" />
<category android:name= "android.intent.category.DEFAULT" />
</intent-filter>
</receiver>

想发送粘性消息的时候必须在配置文件里面获取权限:

<uses-permission android:name="android.permission.BROADCAST_STICKY" />

想用自定义处理器对系统广播进行处理的话也必须在注册文件里面申明获取权限,比如:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

本文转载自:http://www.cnblogs.com/totem1990/archive/2012/09/10/2679391.html

共有 人打赏支持
程序袁_绪龙
粉丝 97
博文 242
码字总数 66750
作品 0
普陀
程序员
android broadcastReceiver生命周期及两种应用

一:Android 广播的生命周期 一个广播接收者有一个回调方法:void onReceive(Context curContext, Intent broadcastMsg)。当一个广播消息到达接收者时,Android调用它的onReceive()方法并传递...

gavin_jin
2012/02/17
0
4
《Android深入透析》之广播(Broadcast)

概述 在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递。举一个大家都比较熟悉的例子来说明。在车上的时候大家都有收听广播的习惯,广播电台通过发送不同频...

朵朵和糖糖
2014/11/12
0
0
Android引入广播机制的用意。单线程模型Message、Handler、Message Que.

注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。 Android 的广播机制 在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一...

一别经年
2014/03/15
0
0
Android学习之Android广播机制

一提起广播,我们首先想到的是收音机,当我们想要收听某个广播台时只需要将收音机的频率调至广播台所在的频率即可!而Android中的广播其实和收音机非常相似,不过它没有所谓的频率,它是由系...

wustrive_2008
2011/07/02
0
2
Android之退出整个应用方法

public abstract class MyActivity extends Activity { // 写一个广播的内部类,当收到动作时,结束activity private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @O......

紫地瓜
2013/01/14
0
5
Android应用程序 --- WakeLock 保持后台唤醒状态

一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使...

带梦想一7飞
2014/02/17
0
0
BroadcastReceiver—使用(II)

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

zt1212
2012/10/12
0
0
Android 中的BroadCastReceiver

BroadCastReceiver 简介 (末尾有源码) BroadCastReceiver 源码位于: framework/base/core/java/android.content.BroadcastReceiver.java 广播接收者( BroadcastReceiver )用于接收广播 ......

等待流星
2014/03/06
0
0
AndroidManifest.xml 解密

一、关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,...

工作日
2013/09/15
0
0
BroadcastReceiver—简介

Android BroadcastReceiver 简介 在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 活动(Activity) - 用于表现功能 服务(Service) - 相当于后台运行的 Activity 广播(Br......

zt1212
2012/10/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

人工智能你必须掌握的32个算法(二)归并排序算法

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子...

木头释然
2分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
25分钟前
1
0
流利阅读笔记27-20180716待学习

生了娃照样能打,两位母亲温网会师 Lala 2018-07-16 1.今日导读 现今在生儿育女后回归事业的母亲们已经非常多见,但是很少有人想到,以高强度运动与竞争激烈为特色的竞技体育项目也会有 work...

aibinxiao
25分钟前
2
0
Guava 源码分析(Cache 原理【二阶段】)

前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。 文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。 在开始之前...

crossoverJie
38分钟前
0
0
OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
今天
407
16
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部