您的位置:首页 > 其它

BroadcastReceiver小结

2016-07-05 17:18 441 查看
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应用内广播
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  BroadcastReceiver