一步一步的學習BroadCastReceiver

1.什麼是BroadcastReceiver

    BroadcastReceiver也就是“廣播接收者”的意思,顧名思義,它就是用來接收來自系統和應用中的廣播。在Android系統中,廣播體現在方方面面,例如當開機完成後系統會產生一條廣播,接收到這條廣播就能實現開機啓動服務的功能;當網絡狀態改變時系統會產生一條廣播,接收到這條廣播就能及時地做出提示和保存數據等操作;當電池電量改變時,系統會產生一條廣播,接收到這條廣播就能在電量低時告知用戶及時保存進度,等等。Android中的廣播機制設計的非常出色,很多事情原本需要開發者親自操作的,現在只需等待廣播告知自己就可以了,大大減少了開發的工作量和開發週期。而作爲應用開發者,就需要數練掌握Android系統提供的一個開發利器,那就是BroadcastReceiver。下面我們就對BroadcastReceiver逐一地分析和演練,瞭解和掌握它的各種功能和用法。

2.如何接受廣播

        知道什麼是BroadcastReceiver後,下面我們通過一個小例子展示如何接受廣播。

      首先創建一個廣播接收器類,該類必須從BroadcastReceiver或其子類繼承,在BroadcastReceiver.onReceiveContext context, Intent intent)方法中編寫處理廣播的代碼。

package com.homer.receiver;  

import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.Intent;  
import android.util.Log;  
  
public class MyReceiver extends BroadcastReceiver {  //1.繼承BroadcastReceiver
      
    private static final String TAG = "MyReceiver";  
      
    @Override  
    public void onReceive(Context context, Intent intent) {  //2.複寫onReceive方法
        String msg = intent.getStringExtra("msg");  
        Log.i(TAG, msg);  
    }  
}  
    其次,我們要註冊廣播,註冊廣播有兩種方式:靜態註冊和動態註冊。

    靜態註冊

   靜態註冊是在AndroidManifest.xml文件中配置的,我們就來爲MyReceiver註冊一個廣播地址:

<receiver android:name="MyReceiver">   
            <intent-filter>
                <action android:name="android.intent.action.MY_BROADCAST" />   //通過action匹配
            </intent-filter>
 </receiver>
   配置了以上信息之後,只要是android.intent.action.MY_BROADCAST這個地址的廣播,MyReceiver都能夠接收的到。注意,這種方式的註冊是常駐型的,也就是說當應用關閉後,如果有廣播信息傳來,MyReceiver也會被系統調用而自動運行。

   動態註冊

     動態註冊需要在代碼中動態的指定廣播地址並註冊,通常我們是在Activity或Service註冊一個廣播,下面我們就來看一下注冊的代碼:

[java] view plaincopy
  1. MyReceiver receiver = new MyReceiver();  
  2.           
  3. IntentFilter filter = new IntentFilter();  
  4. filter.addAction("android.intent.action.MY_BROADCAST");  
  5.           
  6. registerReceiver(receiver, filter);  
注意,registerReceiver是android.content.ContextWrapper類中的方法,Activity和Service都繼承了ContextWrapper,所以可以直接調用。在實際應用中,我們在Activity或Service中註冊了一個BroadcastReceiver,當這個Activity或Service被銷燬時如果沒有解除註冊,系統會報一個異常,提示我們是否忘記解除註冊了。所以,記得在特定的地方執行解除註冊操作:

[java] view plaincopy
  1. @Override  
  2. protected void onDestroy() {  
  3.     super.onDestroy();  
  4.     unregisterReceiver(receiver);  
  5. }  

執行這樣行代碼就可以解決問題了。注意,這種註冊方式與靜態註冊相反,不是常駐型的,也就是說廣播會跟隨程序的生命週期。


3.發送廣播

    本文在activity中通過點擊按鈕來發送廣播,通過sendBroadcast()方法來發送廣播代碼如下:
    

  點擊sendBroadcast按鈕,控制檯打印如下:


看到這樣的打印信息,表明我們的廣播已經發出去了,並且被MyReceiver準確無誤的接收到了

今天先寫到這裏吧,這只是BroadcastReceiver簡單的一個入門,下一個博客會寫一個基本的例子來聯繫,BroadcastReceiver
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章