BroadCast Receiver(廣播接收器)類似於事件處理的機制,只不過這種事件是系統級別的廣播事件。我們既可以使用Intent的sendBroadcast方法發送廣播事件,也可以在程序中實現Broadcast Reciever來監聽和響應這些廣播事件包括系統自身產生的廣播事件,例如收到短信,電池充滿等。下面是本人在學習過程中的歸納和心得。
1. 發送廣播事件
發送廣播事件可以通過Intent的sendBroadcast方法,定義Intent對象的Action。一旦系統中廣播接收器定義的過濾器中允許接受該廣播,就可對所受到的廣播進行響應。代碼如下:
|
2. 接受廣播消息
通過繼承於BroadcastReceiver的子類接受廣播消息。首先需要在AndroidManifest.xml文件中加入receive標籤,並加入Intent過濾器,聲明可以接收的Intent。如下:
|
對廣播消息的響應是通過複寫onRecieve()方法體來實現。在該方法中,處理的是系統廣播事件接收短信,在方法中,將短信讀取,並在提示消息中顯示出來。具體實現方法如下:
|
廣播接收器既可以用於接收自定義的廣播消息,也可以接收系統內部的廣播事件。通過修改AndroidManifest.xml中接收器標籤中的過濾器來實現。如果想要對系統接收到短信這個廣播事件進行響應,則需要進行如下配置:
|
3. 需要注意的問題
a. 一旦廣播接收器能夠響應的事件出現,它就會被觸發而不管這個應用程序有沒有被啓動。但是對於一些需要對UI進行操作的響應來說,這種機制是不合適的,不需要在沒有UI的時候響應消息。系統中提供了另外一種註冊廣播接收器的方法,可以隨着應用程序的開啓和關閉自動開始和結束響應。代碼如下:
|
b. 需要區分Activity和Service接收消息與廣播接收器接收消息機制的不同。
首先,前者接受消息的機制,既可以通過顯式的指明組件名稱傳遞,也可以通過設置接受組件的過濾器來隱式的傳遞。後者只能通過設置過濾器的方法來接收事件;
其次,startActivity()(startService())對應一個Activity或者Service,可以開啓一個活動或者服務。sendBroadcast()對應onRecieve(),它只能用於接收廣播事件;
再次,對於前者接受的系統事件,需要由用戶自己指定傳遞的類型(ACTION)。然後後者所接收的廣播事件,不僅可以接收自定義的廣播事件,也可以由系統自己發出(BROADCAST),用戶僅僅定義接受器即可;
另外,前者在應用程序啓動狀態才接受消息;而後者只要接收到廣播信息,就可以做出相應(在代碼中註冊接收器除外)。