四、BroadcastReceiver两种注册、发送广播 的区别

Android系统内置的电台,发送一些事件:接收短信、外拨电话、电量不足、电量充满、SD插拔、软件安装与下载等。

Android应用程序中的收音机:广播接收者,指定需要接收的事件类型;

可以做一些对用户有用的业务逻辑操作。

这是一个自定义的广播接收者:

public class MyBroadCastReceiver extends BroadcastReceiver   
{  
   @Override  
   public void onReceive(Context context, Intent intent)   
   {   
       //在这里可以写相应的逻辑来实现一些功能
       //可以从Intent中获取数据、还可以调用BroadcastReceiver的getResultData()获取数据
   }   
}

广播接收者的特点:

1、即使广播接收者没有运行,当广播事件到达的时候,系统会自动启动广播接收者,并且调用onReceive方法处理消息;

2、从android4.0之后,添加了一个新特点,如果强制停止就相当于冻结了这个程序,只能等到下次手工启动后才能生效;


(一)注册广播

        1.在代码中注册

//new出上边定义好的BroadcastReceiver
MyBroadCastReceiver yBroadCastReceiver = new MyBroadCastReceiver();

//实例化过滤器并设置要过滤的广播  
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

//注册广播   
myContext.registerReceiver(smsBroadCastReceiver,intentFilter, 
             "android.permission.RECEIVE_SMS", null);  

        2.在Mainfest.xml中静态注册       

//注册广播 
<receiver android:name=".MyBroadCastReceiver">  
            <!-- android:priority属性是设置此接收者的优先级(从-1000到1000) -->
            <intent-filter android:priority="20">
            <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>  
            </intent-filter>  
</receiver>

   3.区别:

         第一种不是常驻性广播,广播跟随程序的生命周期

         第一种是常驻型,也就是程序关闭后,有信息广播来,程序也会被系统调用自动运行

(二)发送广播

     1.无序广播:mContext.sendBroadcast(Intent)或mContext.sendBroadcast(Intent, String)

                      特点:所有的接受者都会接收事件,不可以拦截,不可以被修改

     2.有序广播:mContext.sendOrderedBroadcast(Intent, String, BroadCastReceiver, Handler, int, String, Bundle)

                      特点:按照优先级,一级一级向下传递,接受者可以修改广播数据,也可以终止广播事件


猜你喜欢

转载自blog.csdn.net/qq_25283953/article/details/80941276