下面是Android Doc中关于BroadcastReceiver的概述:
①广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的──比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行广播──比如说,通知其它应用程序一些数据下载完成并处于可用状态。
②应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver基类。
③广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
Android中的广播事件有两种,一种就是系统广播事件,比如:ACTION_BOOT_COMPLETED(系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。另外一种是我们自定义的广播事件。
广播事件的流程
①注册广播事件:注册方式有两种,一种是静态注册,就是在AndroidManifest.xml文件中定义,注册的广播接收器必须要继承BroadcastReceiver;另一种是动态注册,是在程序中使用Context.registerReceiver注册,注册的广播接收器相当于一个匿名类。两种方式都需要IntentFIlter。
②发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。
③接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。
Broadcast组件是Android中最轻薄、最短小的组件。
Receiver的生命周期
一个BroadcastReceiver的对象仅仅在调用onReceiver(COntext, Intent)的时间中有效。一旦你的代码从这个函数中返回,那么系统就认为这个对象应该结束了,不能再被激活。
两种注册方法:
1.静态注册,在AndroidManifest.xml中注册。
注:此种注册方法,手机或模拟器只需运行一次此程序,该receiver变会注册到系统里,任何其它程序都可以调用这个receiver.
代码:
<receiver android:name="xxx">
<intent-filter>
<action android:name="com.example.demo" />
</intent-filter>
</receiver>
新建一个类继承BroadcastReceiver,重写onReceiver()方法
在Activity中通过 Context.sendBroadcast(Intent intent); 方法发送指定action的BroadcastReceiver
2.动态注册,在Activity中通过registerReceiver(IntentFilter intentFilter, BroadcastReceiver broadcastReceiver); 方法将BroadcastReceiver与IntentFilter关联起来.在Activity中新建一个BroadcastReceiver类
代码:
class MyBroadcastReceiver extends BroadcastReceiver{
public vod onReceiver()...
}
IntentFilter intentFilter = new IntentFilter("com.example.demo");
MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
registerReceiver(intentFilter, myBroadcastReceiver);
此种注册方式,要在Activity中的onDestroy()方法中unregisterReceiver()方法中取消注册。此种BroadcastReceiver只在此Activity活动时有效。
两种注册类型的区别是:
1)动态注册不是常驻型广播,也就是说广播跟随程序的生命周期。
2)静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。