广播接收者(BroadCastReceiver)用于接收广播intent,广播intent的发送是通过调用context.sendBroadcast()、context.sendOrderedBroadcast()来实现的,通常一个广播intent被订阅了此intent的多个广播接收者来接收。
广播是一种广泛应用在应用程序之间传输信息的机制,而BroadCastReceiver是对发送出来的广播进行过滤、接收并相应的一类组件。
程序启动BroadCastReceiver的步骤:
第一步:创建需要启动BroadCastReceiver的Intent。
第二步:调用context的sendBroadcast()或sendOrderedBroadcast()来启动指定的BroadCastREceiver。其中sendOrderedBroadcast()发送的是有序广播。
当应用发出一个Broadcast Intent之后所匹配该Intent的组件都可能被启动。
创建BroadCastReceiver的步骤:
第一步:创建BroadCastReceiver的子类。
由于BroadcastReceiver本质上是个监听器,所以创建BroadCastReceiver的方法也非常简单,只要创建一个BroadCastReceiver的子类然后重写onReceive()方法即可。
第二步:注册BroadCastReceive。
一旦实现了BroadCastReceiver,接下来就应该指定该BroadCastReceiver
能匹配的Intent,即注册BroadCastReceiver,注册BroadCastReceiver的方式有两种:
第一种是静态注册:
这种方法是在配置Manifest.xml文件中注册,通过这种方式注册的广播为常驻型广播,也就是说如果应用程序关闭了,有相应事件触发,程序还是会被系统自动调用执行。例如:
<!-- 在配置文件中注册BroadcastReceiver能够匹配的Intent -->
<receiver android:name="com.example.test.MyBroadcastReceiver">
<intent-filter>
</action>
<categoryandroid:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</receiver>
第二种是动态注册:
这种方式是通过代码在.java文件中进行注册。通过这种方式注册的广播为非常驻型广播,即它会跟随activity的生命周期,所以在Activity结束前我们要调用unregisterReceiver(receiver)移除它。例如:
//通过代码的方式动态注册MyBroadcastReceiver
MyBroadcastReceiver receiver=new MyBroadcastReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("android.intent.action.MyBroadcastReceiver");
//注册receiver
registerReceiver(receiver, filter);
注意:如果我们在Activity中注册了BroadCastReceiver,就必须在Activity销毁的时候主动撤销注册,否则会出异常。例如:
protected void onDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
//当Activity销毁的时候取消注册BroadcastReceiver
unregisterReceiver(receiver);
}