標籤:
BroadcastReceiver用於監聽系統全域的廣播訊息,接受程式所發出的Broadcast Intent。
1.Broadcast和BroadcastReceiver
Broadcast被分為兩種:Normal Broadcast(普通廣播);Ordered Broadcast(有序廣播);
Context提供了對應的方法發送廣播這兩種廣播:
sendBroadcast():發送Normal Broadcast
sendOrderedBroadcast():發送Ordered Broadcast(對於Ordered Broadcast,系統會根據接受者聲明的優先順序別按順序逐個執行接受者,優先接受到的Broadcast可以終止Broadcast,調用BroadcastReceiver的abortBroadcast()方法即可終止Broadcast)。
程式啟動BroadcastReceiver需要兩步:
第1步:建立需要啟動的BroadcastReceiver的Intent
第2步:調用Context的sendBroadcast()或者sendOrderedBroadcast()方法來啟動指定的BroadcastReceiver
注意:OnXxxListener只是程式級的監聽器,BroadcastReceiver只是一個系統級的監聽器且擁有自己的進程。
2.發送Broadcast、並使用BroadcastReceiver接受廣播
下面簡單實現了如何發送Broadcast、使用BroadcastReceiver接受廣播:
(1)在Activity中建立一個Intent,並使用該Intent對象對外發送一條廣播
// 建立Intent對象Intent intent = new Intent();// 設定Intent的Action屬性intent.setAction("com.gc.action.CRAZY_BROADCAST");intent.putExtra("msg", "Test Message");// 發送廣播sendBroadcast(intent);
(2)該程式使用到的BroadcastReceiver代碼如下:
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("接受到的Intent的Action:" + intent.getAction()); System.out.println("訊息內容是:" + intent.getStringExtra("msg")"); }}
(3)配置上面的BroadcastReceiver應該監聽的Action字串的Intent
有兩種方式進行配置:
第一種:在代碼中配置:
IntentFilter filter = new IntentFilter("com.gc.action.CRAZY_BROADCAST");MyReceiver receiver = new MyReceiver();registerReceiver(receiver, filter);
第二種:在AndroidManifest.xml檔案中配置
<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="com.gc.action.CRAZY_BROADCAST" /> </intent-filter> </receiver>
3.接受系統廣播訊息
下面是常見Action常量,更多的請參考官方文檔中關於Intent的說明(docs/reference/android/content/Intent.html)。
| Action常量 |
對應字串 |
簡單說明 |
| ACTION_TIME_CHANGED |
android.intent.action.TIME_SET |
系統時間被改變 |
| ACTION_DATE_CHANGED |
android.intent.action.DATE_CHANGED |
系統日期被改變 |
| ACTION_BOOT_COMPLETED |
android.intent.action.BOOT_COMPLETED |
系統啟動完成 |
| ACTION_SHUTDOWN |
android.intent.action.ACTION_SHUTDOWN |
系統被關閉 |
| ACTION_BATTERY_LOW |
android.intent.action.BATTERY_LOW |
電池電量低 |
| ACTION_POWER_CONNECTED |
android.intent.action.ACTION_POWER_CONNECTED |
系統串連電源 |
| ACTION_POWER_DISCONNECTED |
android.intent.action.ACTION_POWER_DISCONNECTED |
系統與電源斷開 |
Android開發實踐 BroadcastReceiver