1.发送和接收广播
1.1发送广播
使用Intent发送广播:首先在需要发消息的地方创建一个Intent对象,将信息的内容和用于过滤的信息封装起来;然后通过三种方法将该Intent对象广播出去:Context.sendBroadcast方法、Context.sendOrderedBroadcast方法、Context.sendStickyBroadcast方法。区别如下:
(1)sendBroadcast或sendStickyBroadcast发送出去的Intent,对于所有满足条件的BroadcastReceiver都会执行其onReceive()方法。但若有多个满足条件的BroadcastReceiver,其执行onReceive()方法的顺序是没有保证的。
(2)通过sendOrderedBroadcast方法发出去的Intent,会根据BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行onReceive()方法,相同优先级的BroadcastReceiver执行的onReceive方法的顺序是没有保证的。
其中sendStickyBroadcast方法发送出去的Intent会一直存在,并且在以后调用registerReceiver注册相匹配的Receiver时会把这个Intent对象直接返回新注册的Receiver。
通常我们在发送广播时使用的是sendBroadcast()方法,但需要注意的是,在构造Intent时,必须用一个全局唯一的字符串标识其要执行的动作,通常使用应用程序包的名称,也可以采用自己定义的动作。如果要在Intent中传递其他的数据,可以用Intent的putExtra()方法。
String Intent_Action = "com.example.remote_service";
Intent intent = new Intent(Intent_Action);
intent.putExtra("参数","参数值");
sendBroadcast(intent);
1.2接收广播
程序发送的广播,必然要有接收器来接收。在Android中,这个广播接收器得我们自己来实现。在这里,我们可以继承BroadcastReceiver类,这就是一个广播接收器。但是,在接收到广播之后,要想处理相关事件,我们必须覆盖其onReceiver()方法,在该方法中实现对广播事件的相关处理。当Android系统接收到与之匹配的广播消息时,会自动启动此BroadcastReceiver开始接收广播。接着上面的广播代码,以下实现接收的代码。
public class MyBroadCastReceiver extends BroadcastReceiver{
//action名称
String Intent_Action = "com.example.remote_service";
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent_Action2)){
//相应事件的处理
}
if(intent.getAction().equals(Intent_Action1)){
//接收多个广播 处理不一样的事件
}
}
1.3声明广播
如果想使用广播接收器响应相应的事件,就必须把广播接收器注册到系统里,让系统知道,我们有这个广播接收器。当有广播来时,系统会找到匹配该广播的广播接收器,之后进行相应事件的处理。广播注册方法有两种:一种是代码注册广播;另一种是在AndroidManifest.xml中配置广播。
(1)在相应代码中动态注册广播的方式如下。
//生成广播接收器
MyBroadCastReceiver receiver = new MyBroadCastReceiver();
//实例化过滤器,并设置要过滤的广播
IntentFilter intentFilter = new IntentFilter("Intent_Action");
//注册广播
registerReceiver(receiver,intentFilter);
(2)在Manifest.xml中配置广播的方式如下。
<receiver android:name=".MainActivity$MyBroadCastReceiver">
<intent-filter>
<action android:name="com.example.remote_service"
</intent-filter>
</receiver>
两种注册类型的区别是:第一种不是常驻型广播,也就是说广播跟随程序的生命周期。第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播过来,程序广播接收器也会被系统调用并自动运行。
广播接收器被注册到系统之后,当系统接收到广播时,通过广播的动作选出对应的广播接收器,再由广播接收器完成相应事件的响应。