本篇介绍Android四大组件之BroadcastReceiver基本知识和常用操作。
BroadcastReceiver用于应用程序内部或之间的消息广播与接收,然后在app内可以启动一个activity或serice来响应它们收到的信息。比如在自己的app内部注册一个BroadcastReceiver,用于侦听系统的一些消息,如低电量提示,短信电话提示、系统启动完毕事件等。需要注意的是BroadcastReceiver适用为传递数据量小且传递频率低的场景。
BroadcastReceiver有两种注册方式:AndroidManifest文件中的静态注册和程序动态注册。
下面通过一个示例演示:
1、添加一个BroadcastReceiver
在项目文件夹上右键选择一个BroadcastReceiver添加到项目中。与Activity一样,也会在AndroidManifest.xml中增加一个BroadcastReceiver的配置项,此为静态注册。
AndroidManifest中的注册项:
<receiver
android:name=".broadcast.MyReceiver"
android:enabled="true"
android:exported="true"></receiver>
2、实现BroadcastReceiver中的方法
public void onReceive(Context context, Intent intent) {
System.out.println("MyReceiver接收到消息:" + intent.getStringExtra("msg"));
}
3、广播消息
在activity中添加一个按钮,用于发送消息:
Intent intent = new Intent(MyReceiver.ACTION);
intent.putExtra("msg", "广播消息");
sendBroadcast(intent);
4、动态注册与注销
- 首先注释掉AndroidManifest中的注册项:
- 在MyReceiver中添加一个变量:
public static final String ACTION = “com.game.cb.test02.broadcast.intent.action.MyReceiver”;
- 在activity中定义个receiver
private MyReceiver myReceiver = new MyReceiver();
- 调用系统方法实现注册与注销
registerReceiver(myReceiver, new IntentFilter(MyReceiver.ACTION));//注册
unregisterReceiver(myReceiver);//注销
动态注册与静态注册的区别:
动态注册:当用来注册的Activity关掉后,广播也就失效了。
静态注册:只要设备是开启状态,广播接收器也是打开着的。即便app本身未启动,该app订阅的广播在触发时也会对它起作用。