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进行了比较详细的阐述。希望能对初学广播的人带来帮助。



BroadcastReceiver使用完全解析

BroadcastReceiver使用完全解析
  • u010375364
  • u010375364
  • 2016年07月09日 10:37
  • 1746

BroadcastReceiver的原理和使用

阿里工程师分享BroadcastReceiver的原理和使用
  • yueqian_scut
  • yueqian_scut
  • 2016年05月02日 23:19
  • 8154

安卓四大控件之BroadcastReceiver详解

BroadcastReceiver详解广播的概念Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。 Android系统在运行的过程中,会产生很...
  • qq_27280457
  • qq_27280457
  • 2016年07月06日 17:00
  • 18458

Android开发学习之路--Broadcast Receiver之初体验

学习了Activity组件后,这里再学习下另一个组件Broadcast Receiver组件。这里学习下自定义的Broadcast Receiver。通过按键自己发送广播,然后自己接收广播。新建MyB...
  • eastmoon502136
  • eastmoon502136
  • 2016年02月13日 21:32
  • 3954

BroadcastReceiver使用完全解析

我们都知道Android四大组件,以前刚写博客的时候也写过其它组件,尽管写的不好,当做学习的笔记吧!比如[Android四大组件之Activity](http://blog.csdn.net/mr_d...
  • Mr_dsw
  • Mr_dsw
  • 2016年05月13日 12:59
  • 2671

关于使用handler与BroadcastReceiver机制来处理动态改变U线程组件

当在同一个Activity中的一些操作会改变这个Activity上的组件显示,可以在这个UI线程(Activity)上设置handler并重写handleMessage()方法来处理消息,并在这个Ac...
  • shw372029857
  • shw372029857
  • 2015年08月20日 22:42
  • 1586

BroadcastReceiver生命周期探讨

前言之前做线控耳机连点两下切下一首歌的需求时, 曾经尝试在BroadcastReceiver中用一个成员变量保存最后一次按下的时间, 但后来发现这个值一直是初始值, 对它赋值后, 再次收到Intent...
  • oqqShaw123
  • oqqShaw123
  • 2015年09月10日 14:10
  • 2020

Android在BroadcastReceiver中通过接口回调更新界面

之前写广播接收器都是写在Activity的内部的,觉得看起来很乱的感觉,毕竟广播也事和活动是同一级别的组件之一,哪儿能放在活动的里面啊,决定就来封装一下,发现居然没有思路,,同事说用静态类,直接点就可...
  • BoxRice
  • BoxRice
  • 2015年10月13日 17:45
  • 4249

Broadcast Receiver开启服务而不是子线程处理耗时操作

Broadcast Receiver用于接收并处理广播通知(broadcast announcements)。多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。程序可以...
  • cquwentao
  • cquwentao
  • 2014年05月29日 01:06
  • 4204

Android跨进程访问(四大组件)- Broadcast Receiver跨进程访问

(1)在应用中接收系统其他应用发出的广播 广播跨进程通讯是一种被动的访问方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与...
  • u010274120
  • u010274120
  • 2015年09月18日 14:51
  • 1054
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android开发之BroadcastReceiver详解
举报原因:
原因补充:

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