天天看點

Android 兩種注冊、發送廣播的差別一.注冊廣播二.發送廣播

<code>BroadcastReceiver</code>廣播接收者用于接收系統或其他程式(包括自己程式)發送的廣播。

在android中,我們如果想接收到廣播資訊,必須自定義我們的廣播接收者。要寫一個類來繼承<code>BroadcastReceiver</code>,并且重寫其<code>onReceive()</code>方法,實作接收到特定廣播所要做的事情。

這是一個自定義的廣播接收者:

我們已經定義好了一個廣播接收者。要想使用它接受到廣播,就要注冊這個廣播接收者。

有兩種方式注冊廣播:

步驟如下:

執行個體化自定義的廣播接收者

執行個體化意圖過濾器,并設定要過濾的廣播類型(如,我們接收收到短信系統發出的廣播)

使用Context的registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)方法注冊廣播

代碼:

直接在<code>Manifest.xml</code>檔案的<code>&lt;application&gt;</code>節點中配置廣播接收者。

還要在<code>&lt;application&gt;</code>同級的位置配置可能使用到的權限

第一種不是常駐型廣播,也就是說廣播跟随程式的生命周期。

第二種是常駐型,也就是說當應用程式關閉後,如果有資訊廣播來,程式也會被系統調用自動運作。

當我們需要發送一個自定義的廣播來通知程式中其他元件一些狀态時,就可以使用發送一條廣播的方式。

有兩種方式分别發送兩種不同的廣播:

通過<code>mContext.sendBroadcast(Intent)</code>或<code>mContext.sendBroadcast(Intent, String)</code>發送的是無序廣播(後者加了權限);

通過<code>mContext.sendOrderedBroadcast(Intent, String, BroadCastReceiver, Handler, int, String, Bundle)</code>發送的是有序廣播。

差別:

無序廣播:所有的接收者都會接收事件,不可以被攔截,不可以被修改。

有序廣播:按照優先級,一級一級的向下傳遞,接收者可以修改廣播資料,也可以終止廣播事件。

定義一個按鈕,設定其點選事件,發送一個無序廣播。

定義一個廣播接收者,來接收這個廣播事件。通過Toast的列印判斷是否收到廣播

在Manifest.xml中配置該接收者。

運作結果為:Toast列印出 “收到廣播”。

和無序廣播使用不同的是 通過 <code>mContext.sendOrderedBroadcast(Intent, String, BroadCastReceiver, Handler, int, String, Bundle)</code>和每個接收者設定優先級,就可以在小于自己優先級的接收者得到廣播前,修改或終止廣播。

定義一個按鈕,設定其點選事件,發送一個有序廣播。

定義多個廣播接收者,來接收這個廣播事件。通過Toast的列印判斷是否收到廣播

在Manifest.xml中配置該接收者。并設定優先級:MyReceiver1&gt;MyReceiver2&gt;MyReceiver3。

運作結果:MyReceiver1得到廣播資料後列印“這是初始資料”,MyReceiver2接收到廣播資料列印“這是修改後的資料”,MyReceiver3沒有列印。

    本文轉自 一點點征服   部落格園部落格,原文連結:http://www.cnblogs.com/ldq2016/p/6955991.html,如需轉載請自行聯系原作者

繼續閱讀