生活中的電視頻道、收音機、手機、都有本身的特定廣播,他們無論是否有人關心、收聽等,無論你是否看電視,每一個頻道都實施按照本身的進步進行播放、收音機也是!因此我理解的android廣播機制也就是這樣--廣播發布者只負責把發生的事件發出,至因而否有接聽者或者接聽者接收到怎樣處理並不關心。java
如今咱們就來實現一個簡單的廣播程序。Android提供了兩種註冊廣播接受者的形式,分別是在程序中動態註冊和在xml中指定。他們之間的區別就是做用的範圍不一樣,程序動態註冊的接收者只在程序運行過程當中有效,而在xml註冊的接收者無論你的程序有沒有啓動有會起做用。首先介紹在程序中動態註冊的方式。android
Android有系統廣播也能夠自定義廣播,要想接受廣播信息,那麼這個廣播接收器就得咱們本身來實現了,咱們能夠繼承BroadcastReceiver,就能夠有一個廣播接受器了。有個接受器還不夠,咱們還得重寫BroadcastReceiver裏面的onReceiver方法,當來廣播的時候咱們要幹什麼,下面一個小程序來進行展現廣播的應用。小程序
1、註冊(當實現了廣播接收器,還要設置廣播接收器接收廣播信息的類型,這裏是信息:android.provider.Telephony.SMS_RECEIVED)app
//生成廣播處理 smsBroadCastReceiver = new SmsBroadCastReceiver(); //實例化過濾器並設置要過濾的廣播 IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); //註冊廣播 BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);
<?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(); } }