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();   
    }   
       
}  
      
相關文章
相關標籤/搜索