1.Android广播机制的介绍
特点:发送方并不关心接收方是否收到数据,以及受到数据之后的操作。
2.BroadcastReceiver的作用
广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调 用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广播 Intent可以被订阅了此Intent的多个广播接收者所接收。
广播是一种广泛运用的在应用程序之间传输信息的机制。而 BroadcastReceiver是对 发送出来的广播进行过滤接收并响应的一类组件;
来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。
BroadcastReceiver自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver可以启动Activity作为响应,或者通过NotificationMananger提醒用户, 或者启动Service等等。
3.BroadcastReceive的生命周期
当发送广播后(intent发送出去后),会到AndroidManifest.xml文件中找是不是有匹 配的action,如果有就会调用TestReceiver,然后获得TestReceiver对象,再执行onReceive 方法,这时候TestReceiver对象就没有用了,当我们再次点击按钮的时候就会重新获得对象,这 就是BroadcastReceiver的生命周期;
4.整个BroadcastReceive的实现过程:
首先,需要自己定义一个继承自BroadcastReceive的类,然后复写它的onReceive方法, 我们主要的代码都在这个方法里面写。然后,需要在AndroidManifest.xml这里面进行注册一 下,用<receive>这个标签进行生命,并用<intent-filter>进行过滤,这里面有一点很重要的是 intent如果符合此处所指定的action属性的话,就会启动这个receive,否则不启动。然后就是 编写Activity这个类,这里面需要需要写一个 监听器,然后通过Intent的setAction以及 Activity的sendBroadcast进行发送广播。
5.注册BroadcastReceiver的方法:
BroadcastReceiver用于监听被广播的事件(intent)为了达到这个目的, BroadcastReceiver必须进行注册,注册的方法有以下两种。
(1)在应用程序代码中进行注册
registerReceiver(receiver,filter)
unregisterReceiver(receiver)//解除broadcastReceiver对象的注册
(我们可以在启动Activity时注册,在Activity不可见以后取消注册)
//生成一个IntentFilter对象
Intentfilterfilter = new IntentFilter();
//为IntentFilter添加一个Action
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
//注册broadcastReceiver对象
this.registerReceiver(smsReceiver,filter);
smsReceiver为接收广播的BroadcastReceiver对象
如果一个BroadcastReceive用于更新UI,那么通常会使用这种方法进行注册 BroadcastReceive;在Activity启动的时候注册BroadcastReceive,而Activity不可见以后就 取消 注册。
(2)在AndroidManifest.xml中进行注册
<receiverandroid:name=".接收器类名">
<intent-filter>
<actionandroid:name="android.intent.action.EDIT">
</intent-filter>
</receiver>
intent-filter过滤器挑选广播中的Action是否匹配,若匹配则生成该Receiver对象
上述注册特点是:应用程序结束了之后,该BroadcastReceiver同样会接受到广播,一直 处于活动状态,有的应用程序需要这一点,有的则不需要,不需要时应该使用另一种注册方法。 5.Android内置的BroadcastActions
action中可以有很多类型如 ACTION_VIEW
ACTION_EDIT
ACTION_MAIN
ACTION_CAMARA_BUTTON(照相机按钮按下)
ACTION_DIAL(拨号)
ACTION_BATTERY_LOW(低电量)
等等可以在帮助文档android:content中找到。