BroadcastReceiver--Android广播机制

什么是广播

        生活中的电视频道、收音机、手机、都有本身的特定广播,他们无论是否有人关心、收听等,无论你是否看电视,每一个频道都实施按照本身的进步进行播放、收音机也是!因此我理解的android广播机制也就是这样--广播发布者只负责把发生的事件发出,至因而否有接听者或者接听者接收到怎样处理并不关心。java

  1. 咱们都知道电台发送的内容大都以语音播报为主,而android中咱们的BroadcastReceiver至关于一个事件,内容存放到intent中,由它来完成传输工做,至因而否进行处理是由intent-filter里的参数进行匹配筛选找出本身关心的,而后进行操做
  2. 生活中用户经过调整具体的频道、频率来接受电台、电视的信息。android中要接受广播的内容是经过注册一个广播的形式来接受特定的广播,而且只有发送的action和接收广播的action相同,有时候集体到发布的内容,接受者才能够接受到这个广播
  3. android中发布广播经过sendBroadcast这个方法来发送
广播在android中的用途
    从上面的介绍不难发现,用来传输数据。具体以下:
  1. .实现了不一样的程序之间的数据传输与共享,只要发送和接收都在同一个action就能轻松实现。好比经常使用的接收到了短信,那么android已经写好一个广播进行处理,解析展现到手机收件箱里,点击显示发送者的内容等,不想接听某人的电话或者短信,均可以使用广播进行实现,因此广播在android中的应用仍是十分普遍的。
  2. 经过广播能够实时更新主ui,更然更新主ui的方法还有不少。
 
怎样实现广播

         如今咱们就来实现一个简单的广播程序。Android提供了两种注册广播接受者的形式,分别是在程序中动态注册和在xml中指定。他们之间的区别就是做用的范围不一样,程序动态注册的接收者只在程序运行过程当中有效,而在xml注册的接收者无论你的程序有没有启动有会起做用。首先介绍在程序中动态注册的方式。android

  1. 动态注册方式:不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。
  2. 配置文件方式:常驻型xml清单注册,也就是说当应用程序关闭后,若是有信息广播来,程序也会被系统调用自动运行。无论是否启动这个应用,只要开机,广播就                在后台时刻监听着。

   Android有系统广播也能够自定义广播,要想接受广播信息,那么这个广播接收器就得咱们本身来实现了,咱们能够继承BroadcastReceiver,就能够有一个广播接受器了。有个接受器还不够,咱们还得重写BroadcastReceiver里面的onReceiver方法,当来广播的时候咱们要干什么,下面一个小程序来进行展现广播的应用。小程序

  1、注册(当实现了广播接收器,还要设置广播接收器接收广播信息的类型,这里是信息:android.provider.Telephony.SMS_RECEIVED)app

    1.  动态注册方式
      1.   //生成广播处理   
        smsBroadCastReceiver = new SmsBroadCastReceiver();   
        //实例化过滤器并设置要过滤的广播   
        IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
        
        //注册广播   
        BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);  
        
    2. 在AndroidManifest.xml中配置广播
      1. <?xml version="1.0" encoding="utf-8"?>  
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
              package="spl.broadCastReceiver"  
              android:versionCode="1"  
              android:versionName="1.0">  
            <application android:icon="@drawable/icon" android:label="@string/app_name">  
                <activity android:name=".BroadCastReceiverActivity"  
                          android:label="@string/app_name">  
                    <intent-filter>  
                        <action android:name="android.intent.action.MAIN" />  
                        <category android:name="android.intent.category.LAUNCHER" />  
                    </intent-filter>  
                </activity>  
                   
                <!--广播注册-->  
                <receiver android:name=".SmsBroadCastReceiver">  
                    <intent-filter android:priority="20">  
                        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
                    </intent-filter>  
                </receiver>  
                   
            </application>  
               
            <uses-sdk android:minSdkVersion="7" />  
               
            <!-- 权限申请 -->  
            <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>  
               
        </manifest>   
        

 

 

  2、继承BroadcastReceiver,重写onReceiver方法。这里是监听到短信发送,将触发这个广播,而后把短信内容解析出来并展现:
public class SmsBroadCastReceiver extends BroadcastReceiver    
{   
  
    @Override  
    public void onReceive(Context context, Intent intent)   
    {   
        Bundle bundle = intent.getExtras();   
        Object[] object = (Object[])bundle.get("pdus");   
        SmsMessage sms[]=new SmsMessage[object.length];   
        for(int i=0;i<object.length;i++)   
        {   
            sms[0] = SmsMessage.createFromPdu((byte[])object[i]);   
            Toast.makeText(context, "来自"+sms[i].getDisplayOriginatingAddress()+" 的消息是:"+sms[i].getDisplayMessageBody(), Toast.LENGTH_SHORT).show();   
        }   
        //终止广播,在这里咱们能够稍微处理,根据用户输入的号码能够实现短信防火墙。   
        abortBroadcast();   
    }   
       
}  
      
相关文章
相关标签/搜索