Android学习笔记---Broadcast Receiver

Broadcast Receiver同样也是Android的四大组件之一,我们将它称为广播接受器.

Broadcast Receiver基础知识

Android系统会随时随地的发送各种各样的广播信息,如开机完成,网络状态改变,有短信到达等.这些广播都可以被开发者所捕获,我们可以通过Broadcast Receiver去获取我们感兴趣的广播.

Broadcast Receiver的创建

要创建自己的Broadcast Receiver对象,需要继承系统的BroadcastReceiver类并实现其onReceive()方法:

1
2
3
4
5
6
7
8
public class MyBroadcastReceiver extends BroadcastReceiver {
private static final String ACTION = "android.intent.action.MyBroadcastReceiver";

@Override
public void onReceive(Context context, Intent intent) {
Log.i("bail", "MyBroadcastReceiver接收到数据:" + intent);
}
}

onReceive()方法内,我们可以获取Intent中的数据.创建完我们的Broadcast Receiver后,我们需要给它注册一个广播地址才能正常工作.
我们可以在AndroidManifest.xml文件中进行配置:

1
2
3
4
5
6
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.MyBroadcastReceiver" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>

配置了以上信息之后,只要是android.intent.action.MyBroadcastReceiver这个地址的广播,MyReceiver都能够接收的到。注意,这种方式的注册是常驻型的,也就是说当应用关闭后,如果有广播信息传来,MyReceiver也会被系统调用而自动运行。
除此之外,我们也可以在代码中动态的指定广播地址并注册,我们可以在ActivityService中进行注册:

1
2
3
4
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(MyBroadcastReceiver.ACTION);
registerReceiver(receiver,filter );

在这里,我们的Broadcast Receiver的生命周期是与注册的组件绑定在一起的,所有在注册组件的onDestroy()中进行解除注册:

1
2
3
4
5
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}

当注册完成后我们便可以向我们的Broadcast Receiver发送广播了:

1
2
3
Intent intent = new Intent(this, MyBroadcastReceiver.class);
intent.putExtra("msg", "send msg!");
sendBroadcast(intent);

更多关于Broadcast Receiver的内容可以查看官方手册.