BroadcastReceiver小结

BroadcastReceiver:


  在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。


    下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程:


  首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。


注:  当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法


     所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。


   注册BroadcastReceiver有两种方式:


   静态注册:在AndroidManifest.xml中用标签生命注册,并在标签内用标签设置过滤器。


   <receiver android:name="myRecevice">    //继承BroadcastReceiver,重写onReceiver方法


    <intent-filter>    


      <action android:name="com.dragon.net"></action> //使用过滤器,接收指定action广播


      </intent-filter>


   </receiver> 


  动态注册:


  IntentFilter intentFilter = new IntentFilter();


  intentFilter.addAction(String);   //为BroadcastReceiver指定action,使之用于接收同action的广播


      registerReceiver(BroadcastReceiver,intentFilter);


  一般:在onStart中注册,onStop中取消unregisterReceiver


  指定广播目标Action:Intent intent = new Intent(actionString);


  并且可通过Intent携带消息 :intent.putExtra("msg", "hi,我通过广播发送消息了");


  发送广播消息:Context.sendBroadcast(intent )


 
注:  当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法


3.注册广播步骤:


第一步:定义一个BroadcastReceiver广播接收类:
[java] view plain copy
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            String action = intent.getAction();  
            if(action.equals(ACTION_NAME)){  
                Toast.makeText(Test.this, "处理action名字相对应的广播", 200);  //在这里可以开启服务,在服务里进行耗时操作;也可以在这里通过handler修改UI线程
            }  
        }  
          
    };  


 
第二步:注册该广播:
[java] view plain copy
public void registerBoradcastReceiver(){  
        IntentFilter myIntentFilter = new IntentFilter();  
        myIntentFilter.addAction(ACTION_NAME);  
        //注册广播        
        registerReceiver(mBroadcastReceiver, myIntentFilter);  
    }  


 
第三步:触发响应
 
[java] view plain copy
mBtnMsgEvent = new Button(this);  
        mBtnMsgEvent.setText("发送广播");  
        mBtnMsgEvent.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                Intent mIntent = new Intent(ACTION_NAME);  
                mIntent.putExtra("yaner", "发送广播,相当于在这里传送数据");  
                  
                //发送广播  
                sendBroadcast(mIntent);  
            }  
        });  
  
注:  当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法  
1)关于系统的,系统会发送广播,我们只要注册广播,并接收处理广播就可以


2)Android系统中内置了多个系统广播,只要涉及到手机的基本操作,基本上都会发出相应的系统广播。如:开启启动,网络状态改变,拍照,屏幕关闭与开启,点亮不足等等。每个系统广播都具有特定的intent-filter,其中主要包括具体的action,
系统广播发出后,将被相应的BroadcastReceiver接收。系统广播在系统内部当特定事件发生时,由系统自动发出。(一般系统发出的广播,用静态注册)


根据广播的发送方式,可以将其分为以下几种类型:
1.Normal Broadcast:普通广播


2.System Broadcast: 系统广播


3.Ordered broadcast:有序广播


4.Sticky Broadcast:粘性广播(在 android 5.0/api 21中deprecated,不再推荐使用,相应的还有粘性有序广播,同样已经deprecated)


5.Local Broadcast:App应用内广播
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值