在android平台中,广播接收器组件用于接收和响应系统广播的消息,广播接收器组件也需要通过activity组件实现与用户的交互。同样的用户自定义的广播接收器需要继承父类BroadcastRecivier,在其所重载的广播接收方法onReceive中实现对广播的过滤和接收。
广播接收器组件有两种使用模式:Java代码引用和XML代码引用。
1)Java代码
首先自定义BroadcastRecivier的子类,然后在activity中进行注册,代码为:
IntentFilter filter = new IntentFilter(Recevier.class.getName());
this.registerReceiver(new Recevier(), filter);
注册广播接收器不仅需要接收器组件,而且还需要意向过滤器。接收器组件用于明确谁来接收广播,意向过滤器用于明确接收哪些广播。广播接收器与意向过滤器是一对多的关系,即一个广播接收器可以注册多个意向过滤器。几乎所有的系统状态都是以广播的形式发送,比如手机状态的改变、网络连接状态的改变等,一般都是采用广播接收器来接收系统状态,并按照系统为各个广播所定义的意向动作来接收系统广播。
Activity也可以对广播接收器进行注销,注销之后将不再接收广播,注销的代码如下:
this.unregisterReceiver(receiver);//recevier为BroadcastRecivier对象实例
2)XML代码的引用方式
在程序清单文件(AndroidManifest)中声明广播接收器,在程序清单中声明之后,无需再对广播接收器进行注册和注销,XML文件中的代码如下:
<receiver
android:name=".Recevier"
android:label="@string/recevier">
<intent-filter>
<action android:name="com.project.fourdemo.Recevier"/>
</intent-filter>
</receiver>
代码中有名称属性(android:name)指明了广播接收器组件名称,意向过滤器用于指明广播接收器只能接收哪些动作与指定动作匹配的广播。在Activity中只需发送广播即可。同样的发送广播要通过intent对象封装数据内容等。
实现广播消息的接收的两种方式中,最大的区别在于广播接收其的初始化方式,对于在Java代码中注册,用户可定制该接收器的初始化方式,如传递的初始化参数等,典型的是传递主线程消息队列处理器(Handler)实例,由此实现将接收器接收内容传递到主线程界面中;而通过程序清单定义广播接收器的处理方式由Android平台自动完成,用户无法干涉,但该方式无需显示的注册和注销广播接收器。