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註冊一個廣播,下面我們就來看一下注冊的代碼:
- MyReceiver receiver = new MyReceiver();
- IntentFilter filter = new IntentFilter();
- filter.addAction("android.intent.action.MY_BROADCAST");
- registerReceiver(receiver, filter);
- @Override
- protected void onDestroy() {
- super.onDestroy();
- unregisterReceiver(receiver);
- }
執行這樣行代碼就可以解決問題了。注意,這種註冊方式與靜態註冊相反,不是常駐型的,也就是說廣播會跟隨程序的生命週期。
3.發送廣播
本文在activity中通過點擊按鈕來發送廣播,通過sendBroadcast()方法來發送廣播代碼如下:
點擊sendBroadcast按鈕,控制檯打印如下:
看到這樣的打印信息,表明我們的廣播已經發出去了,並且被MyReceiver準確無誤的接收到了
今天先寫到這裏吧,這只是BroadcastReceiver簡單的一個入門,下一個博客會寫一個基本的例子來聯繫,BroadcastReceiver