1、广播的注册

    (1)动态广播注册:

          优点:可以灵活控制广播的注册与撤销

          缺点:必须在程序启动时才能接收广播

          IntentFilter :当Intent在组建之间传递时,组件想告诉android系统自己可以响应及处理那些Intent,就要用到IntentFilter类,IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只将自己关心的Intent接收进来进行处理。

          IntentFilter.addAction():根据action设置可以通过的intent,IntentFilter不设置action则所有的intent都无法通过,Intent不设置action则可以通过所有的IntentFilter。

         BroadcastReceiver子类:接收IntentFilter通过的Intent,并且根据Intent的action来区分不同Intent,在重写的onReceive()方法中执行相应操作。

         动态注册/撤销:调用registerReceiver(BroadcastReceiver br,IntentFilter if)注册广播;

                              调用unregisterReceiver(BroadcastReceiver br,IntentFilter if)注销广播。

 

    (2)静态广播注册:

           在androidmanifest.xml中添加<receiver>标签

           

        <receiver 
            android:name="com.feng.Reciver"><!-- 自定义的BroadcastReceiver子类 -->
            <intent-filter >
                <action android:name="com.android.broadcasttest.NEW_LIFEFROM"/><!--该广播接收器可过滤的Intent action-->
</intent-filter>
</receiver>

 

  BroadcastReceiver中不允许开子线程,故BroadcastReceiver更多的是用来打开其他组件,如开启某种服务、发送一条通知栏消息等。

 

2.发送自定义广播

   Intent intent =new Intent(Intent action name)//在注册广播接收器时会为广播接收器添加可通过的Intent action 的名字,如果想

                                                                        //  此时可以指定Intent 的action名字

  sendBroadcast(intent)                                   //还可以由intent携带一些数据到BroadcastReceiver的onReceive()中去处理

 

3、发送有序广播

    Intent intent =new Intent(Intent action name);

    sendorderedBroadcast(intent ,null);//第二个参数为与权限有关的字符串,为空即可

    

       以上发送的广播均为全局广播,全局广播是跨进程的,就是说只要在广播接收器中注册了相应Intent的action,那么不管是本应用发出的广播还是其他应用发出的广播只要携带了该action的Intent,Receiver就都可以接收得到。

      显然这样的全局广播是存在安全隐患的,本应用发送广播时若其他应用也有办法接受得到,那么会就存在敏感数据泄露的危险;并且本应用也会接受到来自其他应用的广播,如果这些广播为垃圾广播,那么本应用就会面临受到攻击的危险。

 

      所以在全局广播的基础上,android系统提出了另一更为安全的广播发送接受机制——本地广播。

 4、本地广播

     使用这种机制发出的广播只能在应用程序内部接收传递,并且广播接收器也只能接收到来自本应用发出的广播,这样所有的安全隐患问题就都不存在了。

     用法:主要使用了LocalBroadcastManager类对广播进行管理

     广播发送及注册的其他原理都不变,只是在广播发送、注册时使用Localbroadcast类对象来发送及注册。

     

//发送本地广播
LocalBroadcastManager         localbroadcastmanager=LocalBroadcastManager.getInstance();
Intent intent =new Intent(Intent action name);
localbroadcastmanager.sendBroadcast(intent);

//注册本地广播
IntentFilter intentfilter=new IntentFilter();
intentfilter.setAction(Intent action name);
localbroadcastmanager.registerReceiver(new LocalReceiver(), intentfilter);

//撤销本地广播
localbroadcastmanager.unregisterReceiver(new LocalReceiver(), intentfilter);

class LocalReceiver extends BroadcastReceiver{
@override
public void onReceiver(Context context , Intent intent){
          // TODO Auto-generated method stub
}
}