簡單摘錄有關(guān)廣播(Broadcast)的重要知識(shí)點(diǎn)。
一般廣播,所有滿足條件的BroadcastReceive都會(huì)執(zhí)行其OnReceive方法,但執(zhí)行順序無保證。
順序廣播,發(fā)送的Intent(意圖)會(huì)根據(jù)BroadcastReceive注冊(cè)的IntentFilter設(shè)置的優(yōu)先級(jí)的順序來執(zhí)行OnReceive(接受)方法。
粘性廣播,其發(fā)送的Intent在發(fā)送后會(huì)一直存在,并且在以后調(diào)用registerReceiver注冊(cè)相匹配的Receive時(shí)會(huì)把這個(gè)Intent直接返回給新注冊(cè)的Receiver。
在清單文件(AndroidManifest.xml)中使用<receiver>標(biāo)簽聲明注冊(cè),并在標(biāo)簽內(nèi)使用<intent-filter>標(biāo)簽設(shè)置過濾器。
注冊(cè)使用調(diào)用Context對(duì)象的registerReceiver方法,銷毀調(diào)用Context對(duì)象的unregisterReceiver,另外動(dòng)態(tài)注冊(cè)BroadcastReceiver對(duì)應(yīng)的Context銷毀時(shí),BroadcastReceiver也就自動(dòng)取消注冊(cè)。
額,為了與上面的干貨對(duì)應(yīng),不過有點(diǎn)不倫不類,不過,沒事,算博眼球了。
下面會(huì)有一個(gè)簡單的例子介紹靜態(tài)廣播和動(dòng)態(tài)廣播,我會(huì)摘錄點(diǎn)重要代碼,具體看我后面的源代碼了,大片大片的源代碼還是放在IDE(集成開發(fā)工具里面好),各位如能一邊看我博客,一邊看eclipse效果更佳。
1.清單列表(Activity后面添加):
1: <!-- 注冊(cè)自定義靜態(tài)廣播接收器 -->
2: <receiver android:name="com.example.broadcastexample.StaticReceiver">
3: <intent-filter>
4: <action android:name="com.bn.my.staticreceiver"></action>
5: </intent-filter>
6: </receiver>
2.發(fā)布廣播:
1: //按鈕變量
2: private Button sendStaticButton;
3: private Button sendDynamicButton;
4: //靜態(tài)變量
5: private static final String STATICACTION="com.bn.my.staticreceiver";
6: private static final String DYNAMICATION="com.bn.my.dynamicreceiver";
7:
8: @Override
9: protected void onCreate(Bundle savedInstanceState) {
10: super.onCreate(savedInstanceState);
11: setContentView(R.layout.activity_main);
12: //得到按鈕并注冊(cè)事件
13: sendStaticButton=(Button)findViewById(R.id.btn_sendStaticBroadcast);
14: sendStaticButton.setOnClickListener(new DiyOnClickLinstener());
15: sendDynamicButton=(Button)findViewById(R.id.btn_sendDynamicBroadcast);
16: sendDynamicButton.setOnClickListener(new DiyOnClickLinstener());
17: }
內(nèi)部類DiyOnClickLinstener
1: class DiyOnClickLinstener implements OnClickListener{
2:
3: @Override
4: public void onClick(View v) {
5: // TODO Auto-generated method stub
6: Intent intent=new Intent();
7: if(v.getId()==R.id.btn_sendStaticBroadcast){
8: intent.setAction(STATICACTION);
9: intent.putExtra("msg", "接受靜態(tài)注冊(cè)廣播成功!");
10: }
11: else if(v.getId()==R.id.btn_sendDynamicBroadcast)
12: {
13: intent.setAction(DYNAMICATION);
14: intent.putExtra("msg", "接受動(dòng)態(tài)廣播成功!");
15: }
16: //發(fā)布廣播
17: sendBroadcast(intent);
18: }
19:
20: }
3.接受廣播
其實(shí)在清單就告訴系統(tǒng)我的接受類是StaticReceiver,該類必須繼承BroadcastReceiver,我們可以新建個(gè)類。
1: public class StaticReceiver extends BroadcastReceiver {
2:
3: @Override
4: public void onReceive(Context context, Intent intent) {
5: // TODO Auto-generated method stub
6: String msg=intent.getStringExtra("msg");
7: Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
8: }
9:
10: }
1.發(fā)布廣播,此處代碼在靜態(tài)廣播的發(fā)布廣播處,自行尋找。
2.onStart方法處,注冊(cè)動(dòng)態(tài)廣播,同清單文件里面填寫,并指定接受廣播時(shí)的事件。
注意,程序的運(yùn)行順序?yàn)閛nCreate()->onStart()。
1: private BroadcastReceiver dynamciReceiver=/**
2: * @author haichao
3: * 動(dòng)態(tài)添加的接受事件
4: */
5: new BroadcastReceiver(){
6:
7: @Override
8: public void onReceive(Context context, Intent intent) {
9: // TODO Auto-generated method stub
10: if(intent.getAction().equals(DYNAMICATION)){//動(dòng)作檢測
11: String msg=intent.getStringExtra("msg");//獲取intentn內(nèi)容
12: Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();//顯示
13: }
14: }
15:
16: };
17: /* (non-Javadoc)
18: * @see android.app.Activity#onStart()
19: * 動(dòng)態(tài)添加廣播
20: */
21: @Override
22: protected void onStart() {
23: // TODO Auto-generated method stub
24: super.onStart();
25: //添加意圖篩選器
26: IntentFilter dynamic_filter=new IntentFilter();
27: dynamic_filter.addAction(DYNAMICATION);
28: registerReceiver(dynamciReceiver,dynamic_filter);
29: }
聯(lián)系客服