广播

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>

两种注册类型的区别是:第一种不是常驻型广播,也就是说广播跟随程序的生命周期。第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播过来,程序广播接收器也会被系统调用并自动运行。

广播接收器被注册到系统之后,当系统接收到广播时,通过广播的动作选出对应的广播接收器,再由广播接收器完成相应事件的响应。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值