Presentation is loading. Please wait.

Presentation is loading. Please wait.

Part 8 Broadcast Receiver、Service和App Widget

Similar presentations


Presentation on theme: "Part 8 Broadcast Receiver、Service和App Widget"— Presentation transcript:

1

2 Part 8 Broadcast Receiver、Service和App Widget
單元43 Broadcast Intent和Broadcast Receiver 單元44 Service是幕後英雄 單元45 App Widget小工具程式 單元46 使用Alarm Manager強化App Widget程式 單元47 App Widget程式的其它二種執行模式 2

3 單元43 Broadcast Intent和Broadcast Receiver

4 Broadcast Intent的運作機制
Broadcast Intent物件的運作機制包含二個部分,一個是送出Intent物件的程式,另一個是監聽廣播訊息的程式(稱為Broadcast Receiver)。Broadcast Receiver程式本身是一個類別,而且必須繼承BroadcastReceiver類別,程式必須向Android系統註冊為Broadcast Receiver,並指定要監聽的廣播訊息。當該監聽的廣播訊息被某個程式送出時,Android系統會啟動所有監聽該廣播訊息的Broadcast Receiver程式,並執行它們的onReceive()方法。

5 Broadcast Intent的運作機制
Broadcast Receiver程式只有在Android系統執行它的onReceive()方法時才是處於有效狀態,一旦onReceive()方法執行完畢,就有可能被移除,直到下次監聽的廣播訊息出現才會再一次執行,例如當你在onReceive()方法中產生一個thread執行某一項比較耗時的工作時,由於onReceive()方法執行結束且Broadcast Receiver程式被系統移除,此舉將導致Broadcast Receiver程式所建立的thread也有可能被Android系統強制清除,因此非同步的工作並不適合在onReceive()方法中執行。

6 程式廣播Intent物件的方法 Step 1. 建立一個Intent物件,並指定要廣播的訊息 Intent it = new Intent(“tw.android.MY_BROADCAST1”); 廣播的訊息其實就是一個字串,每一個程式都可以建立自己的廣播訊息。為了避免不同的程式誤取相同的廣播訊息名稱,一般建議是採用前後顛倒的網址模式來命名,如以上的範例。

7 程式廣播Intent物件的方法 Step 2. 如果需要附帶資料,可以建立一個Bundle物件,再把資料一項一項放入Bundle物件中,最後把Bundle物件設定給Intent物件 Bundle bundle = new Bundle(); bundle.putString(“sender_name”, “Broadcase Receiver範例程式”); it.putExtras(bundle); 讓Intent物件附帶資料還有一個比較簡便的作法,就是直接呼叫Intent物件的putExtra()方法,它也可以把各種型態的資料一項一項放入Intent物件。 it.putExtra("sender_name", "Broadcase Receiver範例程式");

8 程式廣播Intent物件的方法 Step 3. 呼叫sendBroadcast()方法完成廣播Intent物件。 sendBroadcast(it);

9 建立Broadcast Receiver Step 1. 在程式專案中新增一個繼承BroadcastReceiver類別的新類別,我們可以把這個新類別取名為MyBroadcastReceiver。在這個類別中需要完成onReceive()方法中的程式碼,這個方法就是當監聽的廣播訊息出現的時候,會被Android系統啟動執行。 public class MyBroadcaseReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String sender = intent.getExtras().getString("sender_name"); … } } 這個範例我們只是簡單地從接收到的Intent物件中取出資料。注意這個Intent物件是onReceive()方法的引數,不需要呼叫getIntent()方法取得。

10 建立Broadcast Receiver Step 2. 在主程式中向Android系統註冊步驟1所建立的Broadcast Receiver。註冊的方法有二種,第一種是在程式專案的AndroidManifest.xml檔案中描述這個Broadcast Receiver這樣就完成註冊 <?xml …> <manifest …> <application …> <activity android:name=".Main" …> … </activity> <receiver android:name=".MyBroadcaseReceiver“ <intent-filter> <action android:name="tw.android.MY_BROADCAST" /> </intent-filter> </receiver> </application> </manifest>

11 建立Broadcast Receiver 第二種方法是在程式碼中呼叫註冊的方法進行註冊。這種方法還可以把已經註冊過的Broadcast Receiver取消,以下先看註冊的程式碼: IntentFilter itFilter = new IntentFilter("tw.android.MY_BROADCAST"); MyBroadcaseReceiver myReceiver = new MyBroadcaseReceiver(); registerReceiver(mMyReceiver, itFilter); 如果要取消已經註冊的Broadcast Receiver,則執行以下程式碼: unregisterReceiver(myReceiver); 只有使用第二種方式註冊的Broadcast Receiver才能取消。

12 範例程式 在這個程式中會建立2個Broadcast Receiver監聽不同的廣播訊息。第一個Broadcast Receiver(以下稱為BroadcastReceiver1)是利用AndroidManifest.xml檔案進行註冊,第二個Broadcast Receiver(以下稱為BroadcastReceiver2)是利用程式碼進行註冊。程式執行畫面的第一個按鈕就是註冊BroadcastReceiver2,第二個按鈕則是取消註冊BroadcastReceiver2。 程式剛開始執行的時候,按下「傳送MY_BROADCAST1」按鈕時,手機螢幕會出現一個Toast訊息視窗通知BroadcastReceiver1已經收到廣播訊息。如果按下「傳送MY_BROADCAST2」按鈕則沒有任何結果,因為還沒註冊BroadcastReceiver2。按下「註冊BroadcastReceiver2」按鈕,然後再按一次「傳送MY_BROADCAST2」按鈕。此時就會出現一個Toast訊息視窗通知BroadcastReceiver2已經收到廣播訊息。

13 範例程式 請參考範例程式專案中的介面佈局檔、主類別程式檔、和二個Broadcast Receiver類別的程式檔。


Download ppt "Part 8 Broadcast Receiver、Service和App Widget"

Similar presentations


Ads by Google