2025-05-23

兩種註冊類型的區別是:

     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的專欄
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *