Android中BroadCastReceiver详解

BroadcastReceiver的解释

BroadcastReceiver也就是“广播接收者”的意思,它是用来接收来自系统和应用中的广播。

  在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。

下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程:

  (1)首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。

  (2)当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。

注册BroadcastReceiver有两种方式

  静态注册:在AndroidManifest.xml中用标签生命注册,并在标签内用标签设置过滤器。

<receiver android:name=”myRecevice”> //继承BroadcastReceiver,重写onReceiver方法    <intent-filter>      <action android:name=”com.lc.test”/> //使用过滤器,接收指定action广播    </intent-filter>  </receiver>

  动态注册: 使用IntentFilter在代码中动态的注册一个广播

 IntentFilter intentFilter = new IntentFilter(); //为BroadcastReceiver指定action,使之用于接收同action的广播 intentFilter.addAction(String);  registerReceiver(BroadcastReceiver,intentFilter);

 另外值得注意的是,当我们使用动态注册时候,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了,所以我们需要在onDestroy()方法中进行解除注册,一般:在onStart中注册,onStop中取消unregisterReceiver:

() {super.onDestroy();unregisterReceiver(receiver); }

  指定广播目标Action:Intent intent = new Intent(actionString);

  并且可通过Intent携带消息 :intent.putExtra(“msg”, “hi,我通过广播发送消息了”);

  发送广播消息:Context.sendBroadcast(intent )

其中在动态注册中可将BroadcastReceiver的继承类进行封装,添加构造函数和BroadcastReceiver注册

BroadcastReceiver的案例演示

首先我们创建一个类MyBroadcastReceiver用于继承BroadcastReceiver: 这里重写了一个方法就是接受广播的意图并匹配:

//定义的为:public static final String //ACTION_REGISTER_SUCCESS_FINISH=”register.success.finish”;Constants.ACTION_REGISTER_SUCCESS_FINISH.equals(intent.getAction())

这里是常量:定义如下:

{(Context context, Intent intent) {if (intent != null && Constants.ACTION_REGISTER_SUCCESS_FINISH.equals(intent.getAction())) {finish();}}}

(1)接下里我们就通过“动态注册”的方式使用:

private MyBroadcastReceiver receiver = new MyBroadcastReceiver();IntentFilter filter = new IntentFilter();filter.addAction(BmobConstants.ACTION_REGISTER_SUCCESS_FINISH); //添加actionregisterReceiver(receiver, filter); //注册

(2)静态注册的话是现在清单文件中添加:

>=>

(2-1)我们就可以使用代码了:

Intent intent = new Intent(“register.success.finish”); intent.putExtra(“msg”, “hello receiver.”); sendBroadcast(intent); //发送广播普通广播(Normal Broadcast)

普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。为了验证以上论断,我们新建三个BroadcastReceiver,演示一下这个过程,FirstReceiver、SecondReceiver和ThirdReceiver的代码如下:

import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; {String TAG = “NormalBroadcast”;(Context context, Intent intent) {String msg = intent.getStringExtra(“msg”);Log.i(TAG, “FirstReceiver: ” + msg);} } {String TAG = “NormalBroadcast”;(Context context, Intent intent) {String msg = intent.getStringExtra(“msg”);Log.i(TAG, “SecondReceiver: ” + msg);} } {String TAG = “NormalBroadcast”;(Context context, Intent intent) {String msg = intent.getStringExtra(“msg”);Log.i(TAG, “ThirdReceiver: ” + msg);} }

然后再次点击发送按钮,发送一条广播,控制台打印如下:

看来这三个接收者都接收到这条广播了,我们稍微修改一下三个接收者,在onReceive方法的最后一行添加以下代码,试图终止广播:

abortBroadcast();

再次点击发送按钮,我们会发现,控制台中三个接收者仍然都打印了自己的日志,表明接收者并不能终止广播。

有序广播(Ordered Broadcast)诚实是人生绝妙的法宝。虽然对人诚实,

Android中BroadCastReceiver详解

相关文章:

你感兴趣的文章:

标签云: