廣播類別:標(biāo)準(zhǔn)廣播,有序廣播,本地廣播
- 標(biāo)準(zhǔn)廣播異步發(fā)送,所有人能夠接收只要注冊(cè)接收器就能監(jiān)聽
- 有序廣播順序發(fā)送,根據(jù)在便簽intent-filter屬性中設(shè)置優(yōu)先級(jí)屬性 priority = n,說明接收廣播的順序
- 本地廣播,應(yīng)用程序內(nèi)部發(fā)送接收,外界不能接收,提供一定的安全性,通過動(dòng)態(tài)注冊(cè)方式,能接收到的必定是程序自身,那就必須已啟動(dòng)程序
注冊(cè)方式:靜態(tài)注冊(cè),動(dòng)態(tài)注冊(cè)
- 靜態(tài):manifest.xml中添加<receiver/>組件,需要包括<intent-filter>,<action android:name="特定的action-name">,假如action是系統(tǒng)級(jí)別,還要聲明相關(guān)使用權(quán)限<uses-permission android:name />.同時(shí)在java代碼中繼承Broadcast類并重寫onReceive 函數(shù)操作,該函數(shù)內(nèi)部操作不能耗時(shí)不能開線程去執(zhí)行,一般是提供通知或者啟動(dòng)一個(gè)服務(wù).
- 動(dòng)態(tài):一般在需要監(jiān)聽廣播的位置,新建一個(gè)內(nèi)部類Inner,該類Inner繼承Broadcast并重寫onReceive方法.在java代碼中完成intentfilter與內(nèi)部類對(duì)象的綁定.基本步驟是
- 新建 IntentFilter 實(shí)例并將特定的action使用addAction添加到Filter中
- 新建內(nèi)部類Inner的對(duì)象inner,并使用Activity中的registerReceiver將inner與intentfilter完成綁定->
registerReceiver(inner,intentFilter) - 必須保證Activity被onDestory時(shí),解除receiver的綁定
void onDestroy() {
super.onDestroy();
unregisterReceiver(inner);
}
攔截有序廣播
- 有序廣播的發(fā)出,調(diào)用的是sendOrderBroadcast(intent,null).設(shè)置不同的receiver優(yōu)先級(jí),同時(shí)在onReceive函數(shù)中調(diào)用abortBroadcast函數(shù)完成攔截功能.
本地廣播
- 類似動(dòng)態(tài)注冊(cè)過程,不再是使用Activity的registerReceive完成,在Acitivity中添加一個(gè)LocalBroadcastManager實(shí)例完成廣播注冊(cè),intentFilter綁定,發(fā)送本地廣播的工作.(步驟2一般在一個(gè)用戶事件觸發(fā)的函數(shù)中定義,3則是onCreate中必備實(shí)現(xiàn))
- 最先實(shí)例化LocalBroadcastManager
LocalBroadcastManager manager = new LocalBroadcastManager.getInstance(this); - 發(fā)送本地廣播
manager.sendBroadcast(intent) //intent已包含特定action - 注冊(cè)receiver并綁定filter,新建fitler與內(nèi)部類receiver與動(dòng)態(tài)注冊(cè)一致,只是綁定需要用manager實(shí)例完成
manager.registerReceiver(localReceiver,intentfilter);