BroadCast Receiver(广播接收器)类似于事件处理的机制,只不过这种事件是系统级别的广播事件。我们既可以使用Intent的sendBroadcast方法发送广播事件,也可以在程序中实现Broadcast Reciever来监听和响应这些广播事件包括系统自身产生的广播事件,例如收到短信,电池充满等。下面是本人在学习过程中的归纳和心得。
1. 发送广播事件
发送广播事件可以通过Intent的sendBroadcast方法,定义Intent对象的Action。一旦系统中广播接收器定义的过滤器中允许接受该广播,就可对所受到的广播进行响应。代码如下:
|
2. 接受广播消息
通过继承于BroadcastReceiver的子类接受广播消息。首先需要在AndroidManifest.xml文件中加入receive标签,并加入Intent过滤器,声明可以接收的Intent。如下:
|
对广播消息的响应是通过复写onRecieve()方法体来实现。在该方法中,处理的是系统广播事件接收短信,在方法中,将短信读取,并在提示消息中显示出来。具体实现方法如下:
|
广播接收器既可以用于接收自定义的广播消息,也可以接收系统内部的广播事件。通过修改AndroidManifest.xml中接收器标签中的过滤器来实现。如果想要对系统接收到短信这个广播事件进行响应,则需要进行如下配置:
|
3. 需要注意的问题
a. 一旦广播接收器能够响应的事件出现,它就会被触发而不管这个应用程序有没有被启动。但是对于一些需要对UI进行操作的响应来说,这种机制是不合适的,不需要在没有UI的时候响应消息。系统中提供了另外一种注册广播接收器的方法,可以随着应用程序的开启和关闭自动开始和结束响应。代码如下:
|
b. 需要区分Activity和Service接收消息与广播接收器接收消息机制的不同。
首先,前者接受消息的机制,既可以通过显式的指明组件名称传递,也可以通过设置接受组件的过滤器来隐式的传递。后者只能通过设置过滤器的方法来接收事件;
其次,startActivity()(startService())对应一个Activity或者Service,可以开启一个活动或者服务。sendBroadcast()对应onRecieve(),它只能用于接收广播事件;
再次,对于前者接受的系统事件,需要由用户自己指定传递的类型(ACTION)。然后后者所接收的广播事件,不仅可以接收自定义的广播事件,也可以由系统自己发出(BROADCAST),用户仅仅定义接受器即可;
另外,前者在应用程序启动状态才接受消息;而后者只要接收到广播信息,就可以做出相应(在代码中注册接收器除外)。
转载于:https://blog.51cto.com/52android/500534