Android廣播機制(兩種註冊方法)與中斷廣播

來源:互聯網
上載者:User

兩種註冊類型的區別是:

     1)第一種不是常駐型廣播,也就是說廣播跟隨activity的生命週期。注意: 在activity結束前,移除廣播接收器。

     2)第二種是常駐型,也就是說當應用程式關閉後,如果有資訊廣播來,程式也會被系統調用自動運行。

在android下,要想接受廣播資訊,那麼這個廣播接收器就得我們自己來實現了,我們可以繼承BroadcastReceiver,就可以有一個廣播接受器了。有個接受器還不夠,我們還得重寫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();  
    }  
      

 
  當實現了廣播接收器,還要設定廣播接收器接收廣播資訊的類型,這裡是資訊:android.provider.Telephony.SMS_RECEIVED
  我們就可以把廣播接收器註冊到系統裡面,可以讓系統知道我們有個廣播接收器。這裡有兩種,一種是代碼動態註冊:

//產生廣播處理  
smsBroadCastReceiver = new SmsBroadCastReceiver();  
//執行個體化過濾器並設定要過濾的廣播  
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
//註冊廣播
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter); 

 

一種是在AndroidManifest.xml中配置廣播

<?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> 


摘自  weixingyan的專欄
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.