Android开发之BroadcastReceiver详解

一、引言

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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值