Android四大组件之BroadcastReceiver

Broadcast Receiver
广播接收器,是一种负责接收广播消息并对消息做出响应的组件,和Service一样并不提供与用户交互的UI界面。它和事件处理机制类似,只不过事件处理机制是程序组件级别,而广播事件是系统级别。

系统源码:frameworks/base/core/java/android.content.BroadcastReceiver.java

1)BroadcastReceiver生命周期

BroadcastReceiver对象仅在调用onReceive()方法时有效,当该方法调用完毕,系统将摧毁这个对象。当下次再次受到广播的时候将再次new生成一个BroadcastReceiver对象。当onReceive()方法在大概10秒内没有执行完毕,系统会认为该程序无响应,所以在onReceive()方法如果需要做一些耗时的工作,我们可以通过发送Intet给其他Activity或Service来完成。

2)Android标准的广播ACTION

ACTION_TIME_TICK
ACTION_TIME_CHANGED 时间改变
ACTION_TIMEZONE_CHANGED
ACTION_BOOT_COMPLETED 系统启动完毕
ACTION_PACKAGE_ADDED 添加apk包
ACTION_PACKAGE_CHANGED apk包改变
ACTION_PACKAGE_REMOVED
ACTION_PACKAGE_RESTARTED
ACTION_PACKAGE_DATA_CLEARED
ACTION_UID_REMOVED
ACTION_BATTERY_CHANGED 电源改变
ACTION_POWER_CONNECTED 连接电源
ACTION_POWER_DISCONNECTED
ACTION_SHUTDOWN 关机
ACTION_CAMERA_BUTTON 拍照
ACTION_MEDIA_MOUNTED

3)发布广播

我们可以在应用程序中创建自定义的广播事件。广播的内容和用于过滤广播的Action都通过Intent对象发送出去。

{
protected static final String MY_ACTION="com.example.myBroadcast.ACTION"
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("msg", "This is my a broadcast message");
sendBroadCast(intent);
}

在上述代码中我们通过setAction()方法向Intent对象中加入了过滤广播的动作,这个动作是我们自定义的,像Android中内置的广播动作一样,这个动作可以用来唯一的识别我们自定义的广播。

在Context中系统提供了三种发送广播的方法:

(1) Context.sendBroadcast();
所有满足条件的BroadcastReceiver都会执行其onReceive()方法

(2) Context.sendStickyBroadcast();
发送出去的Intent一直存在,而且如果以后系统中注册的BroadcastReceiver满足这个Action时会立即接收到这个广播。

(3) Context.sendOrderedBroadcast();
发送出去的广播会根据BroadcastReceiver注册时IntentFilter设置的优先级的属性来执行其onReceive()方法,相同优先级的BroadcastReceiver执行onReceive()方法的顺序不确定。

4)Broadcast Receiver的注册

如果我们希望在应用程序中能接受到某个广播(Android系统内置的广播或我们自己定义的广播),并且对收到的广播进行处理,那么我们需要创建一个BroadcastReceiver类,在其onReceive()方法中对广播进行处理。同时我们还需要对我们的BroadcastReceiver进行注册(告诉系统自己的存在)。

注册BroadcastReceiver的方法有两种:

(1)在AndroidManifest.xml文件中注册
在AndroidManifest.xml中注册的广播属于常驻型广播,即使应用程序关闭了,还能接收到广播。

首先我们需要创建一个类,继承自BroadcastReceiver并实现其onReceive()方法

public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("msg");
Toast.makeText(context, "接收到的广播为:"+msg, Toast.LENGTH_LONG).show();
}
}

然后在AndroidManifest.xml中注册:

<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.example.myBroadcast.ACTION"/>
</intent-filter>
</receiver>

(2)在应用程序的代码中注册


在代码中使用registerReceiver()方法动态注册的广播属于非常驻型广播,当应用程序关闭后,我们调用了unregisterReceiver()解除了BroadcastReceiver,这种方法比较灵活。

在Activity中我们可以在onResume()方法中通过调用registerReceiver()方法注册我们的BroadcastReceiver

然后在onStop()方法中调用unregisterReceiver()方法进行解注册。

MyBroadcastReceiver myReceiver = null;
protected void onResume() {
super.onResume();
if(myReceiver == null ) {
myReceiver = new MyBroadcastReceiver();
IntentFilter filter = new InterFilter();
filter.addAction(MY_ACTION);
registerReceiver(myReceiver, filter);
}
} protected void onStop() {
if( myReceiver != null ) {
unregisterReceiver(myReceiver);
myReceiver = null;
}
super.onStop();
}

[置顶] Android四大组件之BroadcastReceiver的更多相关文章

  1. Android 四大组件之“ BroadcastReceiver ”

    前言 Android四大组件重要性已经不言而喻了,今天谈谈的是Android中的广播机制.在我们上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就 ...

  2. Android四大组件:BroadcastReceiver 介绍

    介绍 BroadcastReceiver 即广播组件,是 Android 的四大组件之一.用于监听和接收广播消息,并做出响应.有以下一些应用: 不同组件之间的通信(应用内或不同应用之间). 多线程之间 ...

  3. Android四大组件之BroadcastReceiver

    什么是BroadcastReceiver? BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播. 在Android系统中,广播体现在方方面面, ...

  4. Android四大组件之—— BroadcastReceiver的使用

    BroadcastReceiver又名广播接收者.既然它用于接收广播,那一定就有人负责发送. Android系统中的广播: 在现实生活中,我们都知道广播是什么,用来做什么.例如公园里的广播,主要通知游 ...

  5. Android 四大组件之 BroadcastReceiver

    0  简介        BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的 广播.        在Android系统中,广播体现在方方面面,例 ...

  6. Android四大组件之一“广播”

    前言 Android四大组件重要性已经不言而喻了,今天谈谈的是Android中的广播机制.在我们上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就 ...

  7. Android 四大组件之" ContentProvider "

    前言 ContentProvider作为Android的四大组件之一,是属于需要掌握的基础知识,可能在我们的应用中,对于Activity和Service这两个组件用的很常见,了解的也很多,但是对Con ...

  8. 【Android开发日记】之入门篇(六)——Android四大组件之Broadcast Receiver

    广播接受者是作为系统的监听者存在着的,它可以监听系统或系统中其他应用发生的事件来做出响应.如设备开机时,应用要检查数据的变化状况,此时就可以通过广播来把消息通知给用户.又如网络状态改变时,电量变化时都 ...

  9. Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听

    Android实训案例(六)--四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听 Android中四大组件的使用时重中之重,我这个阶段也不奢望能把他 ...

随机推荐

  1. zabbix 发送邮件配置

    Administration->Users->User name->Media <img src="http://img.blog.csdn.net/20160919 ...

  2. SAE Python使用经验 好文推荐

    SAE Python使用经验 好文推荐 SAE Python使用经验 好文推荐

  3. mysql 获取当前时间戳

      mysql 获取当前时间为select now() 运行结果: 2012-09-05 17:24:15 mysql 获取当前时间戳为select unix_timestamp(now()) 运行结 ...

  4. hibernate错题解析

    01 Hibernate错题分析   解析: 此题目考查的是对Hibernate中交叉连接的理解.HQL支持SQL风格的交叉连接查询,交叉连接适用于两个类之间没有定义任何关联时.在where字句中,通 ...

  5. NetAnalyzer笔记 之 三. 用C++做一个抓包程序

    [创建时间:2015-08-27 22:15:17] NetAnalyzer下载地址 经过前两篇的瞎扯,你是不是已经厌倦了呢,那么这篇让我们来点有意思的吧,什么,用C#.不,这篇我们先来C++的 Wi ...

  6. LDAP协议介绍

    LDAP协议基础概念  1. 从用途上阐述LDAP,它是一个存储静态相关信息的服务,适合"一次记录多次读取".经常使用LDAP服务存储的信息: 公司的物理设备信息(如打印机,它的I ...

  7. 可失败构造器(Failable Initializers)

    Xcode6.1中Swift的最新版本是1.1,在该版本中引入了一个新的特性:可失败构造器.通过构造器初始化实际上是给class或struct的每一个存储属性(参数)提供初始值,进行对象实例化的过程. ...

  8. 2014牡丹江——Domination

    题目链接 题意: 给一个n*m的矩阵,每天随机的在未放棋子的格子上放一个棋子.求每行至少有一个棋子,每列至少有一个棋子的天数的期望  (1 <= N, M <= 50). 分析: 比較明显 ...

  9. Builder模式 初体验

        看来Java构造器模式,决定动手体验下.构造器模式是什么?干什么用的?推荐大家看下ITEYE的一篇文章     http://www.iteye.com/topic/71175     了解构 ...

  10. MVC5移除不常用Nuget命令

    ---移除JQuery.* 和bootstartp Uninstall-Package bootstrap Uninstall-Package Microsoft.jQuery.Unobtrusive ...