在android平台中,廣播接收器組件用於接收和響應系統廣播的消息,廣播接收器組件也需要通過activity組件實現與用戶的交互。同樣的用戶自定義的廣播接收器需要繼承父類BroadcastRecivier,在其所重載的廣播接收方法onReceive中實現對廣播的過濾和接收。
廣播接收器組件有兩種使用模式:Java代碼引用和XML代碼引用。
1)Java代碼
首先自定義BroadcastRecivier的子類,然后在activity中進行注冊,代碼為:
IntentFilter filter = new IntentFilter(Recevier.class.getName());
this.registerReceiver(new Recevier(), filter);
注冊廣播接收器不僅需要接收器組件,而且還需要意向過濾器。接收器組件用於明確誰來接收廣播,意向過濾器用於明確接收哪些廣播。廣播接收器與意向過濾器是一對多的關系,即一個廣播接收器可以注冊多個意向過濾器。幾乎所有的系統狀態都是以廣播的形式發送,比如手機狀態的改變、網絡連接狀態的改變等,一般都是采用廣播接收器來接收系統狀態,並按照系統為各個廣播所定義的意向動作來接收系統廣播。
Activity也可以對廣播接收器進行注銷,注銷之后將不再接收廣播,注銷的代碼如下:
this.unregisterReceiver(receiver);//recevier為BroadcastRecivier對象實例
2)XML代碼的引用方式
在程序清單文件(AndroidManifest)中聲明廣播接收器,在程序清單中聲明之后,無需再對廣播接收器進行注冊和注銷,XML文件中的代碼如下:
<receiver
android:name=".Recevier"
android:label="@string/recevier">
<intent-filter>
<action android:name="com.project.fourdemo.Recevier"/>
</intent-filter>
</receiver>
代碼中有名稱屬性(android:name)指明了廣播接收器組件名稱,意向過濾器用於指明廣播接收器只能接收哪些動作與指定動作匹配的廣播。在Activity中只需發送廣播即可。同樣的發送廣播要通過intent對象封裝數據內容等。
實現廣播消息的接收的兩種方式中,最大的區別在於廣播接收其的初始化方式,對於在Java代碼中注冊,用戶可定制該接收器的初始化方式,如傳遞的初始化參數等,典型的是傳遞主線程消息隊列處理器(Handler)實例,由此實現將接收器接收內容傳遞到主線程界面中;而通過程序清單定義廣播接收器的處理方式由Android平台自動完成,用戶無法干涉,但該方式無需顯示的注冊和注銷廣播接收器。