Intent - 用於鏈接以上各個組件,並在其間傳遞消息 spa
BroadcastReceiver
xml
在Android中,Broadcast是一種普遍運用的在應用程序之間傳輸信息的機制。而BroadcastReceiver是對發送出來的 Broadcast進行過濾接受並響應的一類組件。下面將詳細的闡述對象
如何發送Broadcast和使用BroadcastReceiver過 濾接收的過程: it
首先在須要發送信息的地方,把要發送的信息和用於過濾的信息(如Action、Category)裝入一個Intent對象,而後經過調用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent對象以廣播方式發送出去。當Intent發送之後,全部已經註冊的BroadcastReceiver會檢查註冊時的IntentFilter是否與發送的Intent相匹配,若 匹配則就會調用BroadcastReceiver的onReceive()方法。因此當咱們定義一個BroadcastReceiver的時候,都須要 實現onReceive()方法。 io
註冊BroadcastReceiver有兩種方式:
一種方式是,靜態的在AndroidManifest.xml中用<receiver>標籤生命註冊,並在標籤內用<intent- filter>標籤設置過濾器。
另外一種方式是,動態的在代碼中先定義並設置好一個 IntentFilter對象,而後在須要註冊的地方調 Context.registerReceiver()方法,若是取消時就調用Context.unregisterReceiver()方法。若是用動 態方式註冊的BroadcastReceiver的Context對象被銷燬時,BroadcastReceiver也就自動取消註冊了。
另外,若在使用sendBroadcast()的方法是指定了接收權限,則只有在AndroidManifest.xml中用<uses- permission>標籤聲明瞭擁有此權限的BroascastReceiver纔會有可能接收到發送來的Broadcast。
一樣,若在註冊BroadcastReceiver時指定了可接收的Broadcast的權限,則只有在包內的AndroidManifest.xml中 用<uses-permission>標籤聲明瞭,擁有此權限的Context對象所發送的Broadcast才能被這個 BroadcastReceiver所接收。
動態註冊:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(String);--爲 BroadcastReceiver指定action,使之用於接收同action的廣播 registerReceiver(BroadcastReceiver,intentFilter);
通常:在onStart中註冊,onStop中取消unregisterReceiver
發送廣播消息:extends Service
指定廣播目標Action:Intent Intent = new Intent(action-String)
--指定了此action的receiver會接收此廣播
需傳遞參數(可選) putExtra();
ast
發送:sendBroadcast(Intent);後臺