BroadcastReceiver
在Android中桨仿,Broadcast是一種廣泛運(yùn)用的在應(yīng)用程序之間傳輸信息的機(jī)制启上。而BroadcastReceiver是對(duì)發(fā)送出來的 Broadcast進(jìn)行過濾接受并響應(yīng)的一類組件提前。
下面將詳細(xì)的闡述如何發(fā)送Broadcast和使用BroadcastReceiver過濾接收的過程:
首先在需要發(fā)送信息的地方伏蚊,把要發(fā)送的信息和用于過濾的信息(如Action巡通、Category)裝入一個(gè)Intent對(duì)象拦盹,然后通過調(diào)用 sendOrderBroadcast()或sendStickyBroadcast()方法鹃祖,把 Intent對(duì)象以廣播方式發(fā)送出去。
當(dāng)Intent發(fā)送以后普舆,所有已經(jīng)注冊(cè)的BroadcastReceiver會(huì)檢查注冊(cè)時(shí)的IntentFilter是否與發(fā)送的Intent相匹配惯豆,若匹配則就會(huì)調(diào)用BroadcastReceiver的onReceive()方法。所以當(dāng)我們定義一個(gè)BroadcastReceiver的時(shí)候奔害,都需要實(shí)現(xiàn)onReceive()方法楷兽。
注冊(cè)BroadcastReceiver有兩種方式:
靜態(tài)注冊(cè):在AndroidManifest.xml中用標(biāo)簽生命注冊(cè),并在標(biāo)簽內(nèi)用標(biāo)簽設(shè)置過濾器华临。
<receiver android:name="myRecevice"> //繼承BroadcastReceiver芯杀,重寫onReceiver方法
<intent-filter>
<action android:name="com.dragon.net"></action> //使用過濾器,接收指定action廣播
</intent-filter>
</receiver>
動(dòng)態(tài)注冊(cè):
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(String); //為BroadcastReceiver指定action雅潭,使之用于接收同action的廣播
registerReceiver(BroadcastReceiver,intentFilter);
一般:在onStart中注冊(cè)揭厚,onStop中取消unregisterReceiver
指定廣播目標(biāo)Action:Intent intent = new Intent(actionString);
并且可通過Intent攜帶消息 :intent.putExtra("msg", "hi,我通過廣播發(fā)送消息了");
發(fā)送廣播消息:Context.sendBroadcast(intent )
其中在動(dòng)態(tài)注冊(cè)中可將BroadcastReceiver的繼承類進(jìn)行封裝,添加構(gòu)造函數(shù)和BroadcastReceiver注冊(cè)
轉(zhuǎn)載:https://www.cnblogs.com/jico/articles/1838293.html
一扶供、注冊(cè)方式
intent.setAction("BC_One");
1.靜態(tài)注冊(cè)
<receiver android:name = "繼承BroadcastReceiver的子類">
<intent-filter>
<action android:name = "BC_One"/>
</intent-filter>
</receiver>
2.動(dòng)態(tài)注冊(cè)
IntentFilter filter = new IntentFilter("BC_One");
//這兩句話等價(jià)于上面一句話
IntentFilter filter = new IntentFilter();
filter.addAction("BC_One");
BC2 bc = new BC2(); //這個(gè)是繼承BroadcastReceive這個(gè)子類
registerReceiver(bc,filter);
動(dòng)態(tài)注冊(cè)優(yōu)先級(jí)高于靜態(tài)注冊(cè)
sendBroadcast(intent1);
發(fā)送廣播后筛圆,會(huì)回調(diào) 以下函數(shù),這個(gè)函數(shù)對(duì)應(yīng)的類就是用
registerReceiver函數(shù)綁定BroadcastReceive的intent
BC2 bc = new BC2(); //這個(gè)是繼承BroadcastReceive這個(gè)子類
registerReceiver(bc,filter);
@Override
public void onReceive(Context context, Intent intent) {}