閱讀995 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android廣播機製

一、Android廣播機製介紹

廣播機製最大的特點就是發送方並不關心接收方是否接到數據,也不關心接收方是如何處理數據的。

Android中廣播的是操作係統中產生的各種各樣的事件。例如,收到一條短信就會產生一個收到短信息的事件。而Android操作係統一旦內部產生了這些事件,就會向所有的廣播接收器對象來廣播這些事件。

BraodcastReceiver(廣播接收器)是為了實現係統廣播而提供的一種組件,並且廣播事件處理機製是係統級別的。比如,我們可以發出一種廣播來測試是否收到短信,這時候就可以定義一個BraodcastReceiver來接受廣播,當收到短信時提示用戶。我們既可以用Intent來啟動一個組件,也可以用sendBroadcast()方法發起一個係統級別的事件廣播來傳遞消息。

我們也可以在自己的應用程序中開發BroadcastReceiver,然後把廣播接收器這個類或者對象注冊到Android操作係統上去,讓操作係統知道現在有這樣一個廣播接收器正在等待接收Android操作係統的廣播,即在自己的應用程序中實現BroadcastReceiver來監聽和響應廣播的Intent。

當有廣播事件產生時,Android操作係統首先告訴注冊到其上麵的廣播接收器產生了一個怎麼樣的事件,每個接收器首先判斷是不是我這個接收器需要的事件,如果是它所需要的事件,再進行相應的處理。

例子,我們把騷擾電話的黑名單放到數據庫中去,當接到電話時會產生一個接電話事件,事先在Android操作係統中注冊一個BroadcastReceiver的對象,當產生事件的時候,會通知我們的廣播接收器對象,接收器對象接收到消息之後,就會到數據庫裏麵去取所有黑名單電話和接到的這個電話號碼進行比較,如果匹配就直接掛掉。

二、注冊BroadcastReceiver的方法

BroadcastReceiver用於監聽被廣播的事件(Intent),為了達到這個目的,BroadcastReceiver必須進行注冊,注冊的方法有以下兩種:

1.靜態注冊

靜態注冊方式是在AndroidManifest.xml的application裏麵定義receiver並設置要接收的action。

靜態注冊方式的特點:不管改應用程序是否處於活動狀態,都會進行監聽。

[html] view plaincopy
  1. <receiver android:name="MyReceiver">  
  2.     <intent-filter>  
  3.         <action android:name="MyReceiver_Action"/>  
  4.     </intent-filter>  
  5. </receiver>  
其中,MyReceiver為繼承BroadcastReceiver的類,重寫了onReceiver方法,並在onReceiver方法中對廣播進行處理。<intent-filter>標簽設置過濾器,接收指定action廣播。

2.動態注冊

動態注冊方式在activity裏麵調用函數來注冊,和靜態的內容差不多。一個形參是receiver,另一個是IntentFilter,其中裏麵是要接收的action。

動態注冊方式特點:在代碼中進行注冊後,當應用程序關閉後,就不再進行監聽。

[java] view plaincopy
  1. MyReceiver receiver = new MyReceiver();  
  2. //創建過濾器,並指定action,使之用於接收同action的廣播  
  3. IntentFilter filter = new IntentFilter("MyReceiver_Action");  
  4. //注冊廣播接收器  
  5. registerReceiver(receiver, filter);  
三、發送廣播

[java] view plaincopy
  1. // 指定廣播目標Action  
  2. Intent intent = new Intent("MyReceiver_Action");  
  3. // 可通過Intent攜帶消息  
  4. intent.putExtra("msg""發送廣播");  
  5. // 發送廣播消息  
  6. sendBroadcast(intent);  
四、注銷BroadcastReceiver

[java] view plaincopy
  1. //注銷廣播接收器  
  2. unregisterReceiver(receiver);  

注:

1.一般在onStart中注冊BroadcastReceiver,在onStop中取消BroadcastReceiver。

2.一個BroadcastReceiver 對象隻有在被調用onReceive(Context, Intent)時才有效,當從該函數返回後,該對象就無效的了,結束生命周期。

最後更新:2017-04-04 07:03:42

  上一篇:go Oracle中的常用權限視圖
  下一篇:go Linux tar壓縮時排除某個目錄或文件的參數