兩種註冊類型的區別是:
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的專欄