Android 的廣播機制和兩種註冊方式
阿新 • • 發佈:2019-01-09
1.Android 的廣播機制
在 Android 裡面有各種各樣的廣播,比如電池的使用狀態,電話的接收和簡訊的接收都會產生一個廣播,應用程式開發者也可以監聽這些廣播並做出程式邏輯的處理。下面我畫一張粗略的圖來幫助大家理解廣播的執行機制。
Android 中有各式各樣的廣播,各種廣播在Android 系統中執行,當系統/應用程式執行時便會向 Android 註冊各種廣播,Android 接收到廣播會便會判斷哪種廣播需要哪種事件,然後向不同需要事件的應用程式註冊事件,不同的廣播可能處理不同的事件也可能處理相同的廣播事件,這時就需要Android 系統為我們做篩選。
2.註冊
在android下,要想接受廣播資訊,那麼這個廣播接收器就得我們自己來實現了,我們可以繼承BroadcastReceiver
{
@Override
publicvoidonReceive(Contextcontext,Intentintent)
{
Bundlebundle=intent.getExtras();
Object[]object=(Object[])bundle.get("pdus
SmsMessagesms[]=newSmsMessage[object.length];
for(inti=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();
}
//終止廣播,在這裡我們可以稍微處理,根據使用者輸入的號碼可以實現簡訊防火牆。
}
}
當實現了廣播接收器,還要設定廣播接收器接收廣播資訊的型別,這裡是資訊:android.provider.Telephony.SMS_RECEIVED
我們就可以把廣播接收器註冊到系統裡面,可以讓系統知道我們有個廣播接收器。這裡有兩種,一種是程式碼動態註冊:
//生成廣播處理smsBroadCastReceiver=newSmsBroadCastReceiver();//例項化過濾器並設定要過濾的廣播 IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
//註冊廣播BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver,intentFilter);
一種是在AndroidManifest.xml中配置廣播
<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="spl.broadCastReceiver"
android:versionCode="1"
android:versionName="1.0"><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><activityandroid:name=".BroadCastReceiverActivity"
android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity><!--廣播註冊--><receiverandroid:name=".SmsBroadCastReceiver"><intent-filterandroid:priority="20"><actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/></intent-filter></receiver></application><uses-sdkandroid:minSdkVersion="7"/><!--許可權申請--><uses-permissionandroid:name="android.permission.RECEIVE_SMS"></uses-permission></manifest>
兩種註冊型別的區別是:
1)第一種不是常駐型廣播,也就是說廣播跟隨程式的生命週期。
2)第二種是常駐型,也就是說當應用程式關閉後,如果有資訊廣播來,程式也會被系統呼叫自動執行。