广播接收者,事实上是一种观察者模式的实现。通过对关心的事件进行订阅(通过Intent-Filter来过滤意图),当关心事件发生时(广播一个意图),会自动回调广播接受者的onReceive()方法。广播接受者自身没有图形化的显示界面,通常会在onReceive()方法里启动一个Activity或者通过NotificationManager来提醒用户。以下是使用方法:
1、 广播接收者作为android四大组件之一,必须进行注册,注册的方式有两种,一种是静态方式,即在清单文件中注册。二是动态方式,通常在Activity中进行注册。
静态注册:
<receiver android:name="com.example.broadcasttest.MyBroadcastReceiver">
<intent-filter>
<action android:name="com.com.freedie.broadcast"/>
</intent-filter>
</receiver>
这种方式的特点是,不管当前应用是否启动,都能接受广播。
动态注册:一般在onResume()方法中注册,在onPause()方法中注销。
public void onResume(){
super.onResume();
receiver=new MyBroadcastReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("com.freedie.broadcast");
this.registerReceiver(receiver, filter);
}
public void onStop(){
super.onStop();
this.unregisterReceiver(receiver);
}
2、 在应用中发起广播,该广播的action与注册的关心事件的动作相同
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.button1){
Log.d("broadcast", "send intent");
Intent intent=new Intent();
intent.setAction("com.freedie.broadcast");
this.sendBroadcast(intent);
}
}
3、 编写Receiver的回调方法onReceive()
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals("com.freedie.broadcast")){
Log.d("broadcast", "com.freedie.broadcast was received!");
}
}
实际上,receiver可以接受两类广播。
1. Normal Broadcast这类广播由sendBroadcast(intent)发出。接受者接受该类广播的顺序是不定的,通常是同时接受。这意味着效率高,但是接受者不能将处理结果进行传递,也不能终止广播。
2. Ordered Broadcast这类广播由sendOrderedBroadcast发出。每个时刻只有一个接受者接受该广播,处理完了以后传递给下一个广播。接受的顺序,按照优先级来确定,优先级相同时顺序随机。这种广播可以传递处理结果,还可以随意终止广播。