Android開發_BroadcastReceiver組件

BroadcastReceiver介紹

BroadcastReceiver 即“廣播接收者”,常用來接收來自系統或應用的廣播(Intent)。在Android系統中,有時候會發送一些廣播,如系統啓動完畢時,系統電量不足時等等;開發者可以通過接收這些不同的廣播來進行一些相關的操作。通常一個廣播 Intent 可以被訂閱了此 Intent 的多個廣播接收者(BroadcastReceiver )所接收。 

BroadcastReceiver 自身並不實現圖形用戶界面,但是當它收到某個通知後, BroadcastReceiver 可以啓動 Activity 作爲響應,或者通過 NotificationMananger 提醒用戶,或者啓動 Service 等等。

public class MyBroadcastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("onReceive");
	}
}


註冊廣播接收者(BroadcastReceiver)的方式

1、靜態註冊

// 在AndroidManifest.xml文件中
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
	<action android:name="android.intent.action.MY_BROADCAST"/>
	<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
注意:這種方式的註冊是常駐型的,也就是說當應用關閉後,如果有廣播信息傳來,MyBroadcastReceiver也會被系統調用而自動運行。

2、動態註冊

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

// 註冊receiver
MyBroadcastReceiver receiver = new MyBroadcastReceiver();

IntentFilter filter = new IntentFilter();
filter.addAction("包名.intent.action.MY_BROADCAST");
        
registerReceiver(receiver, filter);

// 取消註冊
unregisterReceiver(receiver);
注意:當這個Activity或Service被銷燬時如果沒有解除註冊,系統會報一個異常,提示我們是否忘記解除註冊了。動態註冊方式與靜態註冊相反,不是常駐型的,也就是說廣播會跟隨程序的生命週期。


廣播的類型

1、普通廣播(Normal Broadcast)

普通廣播對於多個接收者來說是完全異步的,通常每個接收者都無需等待即可以接收到廣播,接收者相互之間不會有影響。對於這種廣播,接收者無法終止廣播,即無法阻止其他接收者的接收動作。方法:sendBroadcast(intent)。

2、有序廣播(Ordered Broadcast)

有序廣播比較特殊,它每次只發送到優先級較高的接收者那裏,然後由優先級高的接受者再傳播到優先級低的接收者那裏,優先級高的接收者有能力終止這個廣播,可以通過abortBroadcast()方法截斷廣播使其他的接收者無法收到該廣播。方法:sendOrderedBroadcast(intent, receiverPermission),該方法第2個參數決定該廣播的級別,級別數值是在 -1000 到 1000 之間 , 值越大 , 發送的優先級越高。

3、無序廣播

通過Context.sendStickyBroadcast(Intent myIntent)發送的,還有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler,  initialCode, initialData, initialExtras)方法,該方法具有有序廣播的特性也有異步廣播的特性;發送異步廣播要: <uses-permission android:name="android.permission.BROADCAST_STICKY" />權限,接收並處理完Intent後,廣播依然存在,直到你調用removeStickyBroadcast(intent)主動把它去掉,一般較少用。

發佈了46 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章