Android开发之BroadcastReceiver详解

原创 2015年11月20日 12:41:42

一、引言

在Android开发中,BroadcastReceiver是常常用到的。它主要用来接收系统广播并进行相应的事件处理。在开始正式介绍BroadcastReceiver组件之前,我们先讲一下Android中的广播机制,以便对该组件的使用原理和使用方法有更深层次的理解。

Android系统会经常发送出一些广播,例如在系统开机时会发出一条广播,接收者在接收到广播之后完成系统各个模块的参数初始化或者播放开机音乐等。当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度。这样的例子很多,不再一一列述。

请注意:广播跟通知不太一样,广播的发出时它不管接收者是谁,只要能匹配就能接受和进行事件处理。如下图所示:

        

      Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。下面将着通过一个实例---接受短信广播,着重介绍一下BroadcastReceiver具体的创建和使用方法。

二、BroadcastReceiver分类

广播接收器通常初始化独立的组件或者在onReceive()方法中发送通知给用户。那么,用于接收广播的广播接收器有以下两类。

1)普通广播:使用context.sendBroadcast()方法进行发送,它是完全异步的操作。广播接收者通常以未定义的顺序运行,这样会高效运行。但是,接收者不能使用结果或者终止API。

2)有序广播:使用context.sendOrderedBroadcast()方法发送,每次只发送给一个接收者。这样的话,前面的接收者可以为后面的接收者提供一个结果,甚至终止广播以便不将广播传递给后面的接收者。注意一点,具有相同优先级的广播接收者的运行是随意的。

三、BroadcastReceiver创建

首先,要创建一个类,它继承自BroadcastReceiver,并覆写其中的onReceive()方法。

        public class MyReceiver extends BroadcastReceiver {

    private static final String action = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(action)) {
                Toast.makeText(context,"您有一条短消息,请注意查收。", Toast.LENGTH_SHORT).show();
        }
    }
   }

上面的操作就是当系统接收到一条短息之后,该BroadcastReceiver 类的子类会利用intent.getAction().equals(action)进行匹配。如果配对成功,则说明它可以接收系统短信广播,那么就可以进行接下来的事件处理了。

四、BroadcastReceiver注册

当系统定义了一个BroadcastReceiver广播接收者时,它还不能进行接收广播的处理。这里我们还要对这个类在系统中进行注册,才能发挥其作用。注册,顾名思义,就是要让系统知道系统中存在这么一个广播接收者对象。BroadcastReceiver的注册分为两种:

1)一种是在全局文件manifest.xml中进行注册

<receiver android:name=".MyReceiver">
            <intent-filter >
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>

这样注册的好处是,系统处于非运行状态时也能接收到来自系统的广播。所以,它的耗能、耗电量会多一点。

       2)另一种是在一个Activity中进行注册

registerReceiver(BroadcastReceiver receiver, IntentFilter filter);

参数一为BroadcastReceiver 类对象

参数二为IntentFilter对象

本例中我们就可以这样写:registerReceiver(new MyReceiver(), new IntentFilter(Intent.ACTION_SEND));

以上两种方法都可以完成广播接收器的注册,具体使用哪一个,大家可以自由选择。

总结:上面主要从概念和特点、分类、声明和注册四个方面对广播接收者BroadcastReceiver进行了比较详细的阐述。希望能对初学广播的人带来帮助。



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android开发BroadcastReceiver详解

Android 内置了很多系统级别的广播。 广播的注册方式有两种,一种是代码注册,另一种是在AndroidManifest.xml 中注册。当然,前者称为动态注册,后者称为静态注册。 下面我们就使...

Android开发之BroadcastReceiver详解

转自:http://blog.csdn.net/fengyuzhengfan/article/details/38414625 BroadcastReceiver,顾名思义就是“广播接收者”的意思,...

Android开发之BroadcastReceiver详解

BroadcastReceiver,顾名思义就是“广播接收者”的意思,它是Android四大基本组件之一,这种组件本质上是一种全局的监听器,用于监听系统全局的广播消息。它可以接收来自系统和应用的的广播...

android开发(十九) BroadcastReceiver应用详解

本文源自:http://blog.csdn.net/liuhe688/article/details/6955668

Android开发(41) android的BroadcastReceiver运用详解

BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到...

【Android开发那点破事】消息推送BroadcastReceiver,点击通知打开两次Activity问题

Android开发中,通常会使用BroadcastReceiver来接受Push推送消息。当APP收到推送通知时,我们需要在通知的点击事件中加入自己的逻辑。比如跳转到MainActivity。比如下面...

Android开发之Intent和BroadcastReceiver

Broadcast Receiver(广播接收者)可以用来监听Broadcast Intent。要使Broadcast Receiver能接收广播,就需要对其进行注册,既可以使用代码,也可以在应用程序...

Android开发之一起来学BroadcastReceiver

纸上得来终觉浅,绝知此事要躬行!!
  • dmk877
  • dmk877
  • 2015-04-22 20:30
  • 3382

Android开发学习之路 -- 关于BroadcastReceiver

标准广播:异步发送,同时发送给ABC 有序广播:顺序发送,先发送到A,然后再发送到B,再到C   广播注册方式: 1.静态注册: 可以实现开机自动启动应用程序 实现步骤: 1) 新建一个类继承Boar...

[android开发入门]初识BroadcastReceiver

初识BroadcastReceiver
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)