Android应用组件主要由Activity、Service、Broadcast Receivers、Intent、Content Providers、AndroidManifest等构成。其中Activity是与用户直接交互UI组件;Service是运行在后台、用户不可见的服务组件,今天给大家介绍的Broadcast Receivers 则是进行系统消息广播的广播组件。
广播接收器(Broadcast Receivers)是用来接收或者响应广播、通告的一个应用组件,它与通知管理器密切相关。当时区发生改变、电量不足、工作语言发生改变等事件发生时,注册相应广播接收器的应用将会收到这些信息。
所有的广播接收器都需要基于android.content.BroadcastReceiver基类。通过Context.registerReceiver()方法,开发者可以动态地注册广播接收器。
定义接收的广播的方式如下:
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_CHANGED);
filter.addAction(Intent.ACTION_DATE_CHANGED);
filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
registerReceiver(mIntentReceiver, filter);
广播接收器的实现如下:
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (action.equals(Intent.ACTION_TIME_CHANGED)
|| action.equals(Intent.ACTION_DATE_CHANGED)
|| action.equals(Intent.ACTION_TIMEZONE_CHANGED)) {
……
}
}
};
在调用组件被销毁时,必须销毁广播接收器,其方法如下:
protected void onPause()
{
super.onPause();
unregisterReceiver(mIntentReceiver);
}
当然在AndroidManifest.xml文件中,也可以定义相应的广播接收器。其方法如下:
< receiver android:name="com.android.camera.CameraButtonIntentReceiver">
< intent-filter>
< action android:name="android.intent.action.CAMERA_BUTTON"/>
< /intent-filter>
< /receiver>
在目前的实现中,广播分为两种类型:标准广播(Normal broadcasts)、顺序广播(Ordered broadcasts)。
标准广播指广播是完全异步的,所有的接收器处于无序的运行状态。这类广播通过Context.sendBroadcast()方法发送。
顺序广播则按照一定的优先级进行广播,高优先级的接收器向低优先级的接收器转播广播。如果需要,高优先级的接收器也可以抛弃广播,从而切断低优先级的接收器收到广播的可能,在同一优先级的接收器,收到广播的顺序则是随机的。顺序广播通过Context.sendOrderedBroadcast()方法发送。