從頭學(xué)Android之BroadcastReceiver_第1頁
從頭學(xué)Android之BroadcastReceiver_第2頁
從頭學(xué)Android之BroadcastReceiver_第3頁
從頭學(xué)Android之BroadcastReceiver_第4頁
從頭學(xué)Android之BroadcastReceiver_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、BroadcastReceiver簡介BroadcastReceiver明白得為廣播接收者,它用于接收程序所發(fā)出的Broadcast的Intentc它在一端監(jiān)聽接收廣播消息,然后再做出處置。它的本質(zhì)上確實(shí)是屬于一個(gè)監(jiān)聽器。啟動(dòng)BroadcastRecevicer的方式有兩種:sendBroadcast()和sendOrderedBroadcast(),二者的區(qū)別確實(shí)是前者是發(fā)送一個(gè)一般的廣播,后者是發(fā)送一個(gè)有序的廣播。開發(fā)廣播接收才的步驟:1、繼承BroadcastReceiver類,重寫onReceiver(Contextcontext,Intentintent)方式2、在中注冊,一樣也能夠

2、在代碼中實(shí)現(xiàn)注冊3、通過sendBroadcast()或sendOrderedBroadcast()啟動(dòng)對應(yīng)的BroadcastReceiver下面別離介紹:實(shí)現(xiàn)廣播消息處置機(jī)制的方式繼承BroadcastReceiver,覆蓋onReceivejavaviewplaincopyprint?publicclassMyReceiverextendsBroadcastReceiverpublicMyReceiver()System.out.println(-myReceiverconstructor-);publicvoidonReceive(Contextcontext,Intentintent

3、)System.out.println(-onReceive-);/取到信息StringreceiveMsg=intent.getStringExtra(msg);Toast.makeText(context,receiveMsg,Toast.LENGTH_LONG).show();注冊BroadcastReceiver的兩種方式:方式一:中注冊:htmlviewplaincopyprint?方式二:應(yīng)用程序代碼中注冊javaviewplaincopyprint?myReceiver2=newMyReceiver2();IntentFilte門ntentFilter=newIntentFilt

4、er();Intentintent=newIntent();intentFilter.addAction(SMS_ACTION);registerReceiver(myReceiver2,intentFilter);兩種注冊方式的區(qū)別:1)第一種是常駐型,也確實(shí)是說當(dāng)應(yīng)用程序關(guān)閉后,若是有信息廣播來,程序也會被系統(tǒng)挪用自動(dòng)運(yùn)行。2)第二種不是常駐型廣播,也確實(shí)是說廣播跟從程序的生命周期。廣播的類型:廣播被分為兩種不同的類型:”一般廣播(Normalbroadcasts)和有序廣播(Orderedbroadcasts)”。一般廣播是完全異步的,能夠在同一時(shí)刻(邏輯上)被所有接收者接收到,消息傳遞

5、的效率比較高,但缺點(diǎn)是:接收者不能將處置結(jié)果傳遞給下一個(gè)接收者,而且無法終止廣播Intent的傳播;但是有序廣播是依照接收者聲明的優(yōu)先級別(聲明在intent-filter元素的android:priority屬性中,數(shù)越大優(yōu)先級別越高,取值范圍:-1000到1000。也能夠挪用IntentFilter對象的setPriority()進(jìn)行設(shè)置),被接收者依次接收廣播。如:A的級別高于B,B的級別高于C,那么,廣播先傳給A,再彳專給B,最后傳給C。A取得廣播后,能夠往廣播里存入數(shù)據(jù),當(dāng)廣播傳給B時(shí),B能夠從廣播中取得A存入的數(shù)據(jù)。Context.sendBroadcast()發(fā)送的是一般廣播,所

6、有定閱者都有機(jī)遇取得并進(jìn)行處置。Context.sendOrderedBroadcast()發(fā)送的是有序廣播,系統(tǒng)會依照接收者聲明的優(yōu)先級別按順序逐個(gè)執(zhí)行接收者,前面的接收者有權(quán)終止廣播(BroadcastReceiver.abortBroadcast(),若是廣播被前面的接收者終止,后面的接收者就再也無法獲取到廣播。關(guān)于有序廣播,前面的接收者能夠?qū)⑻幹媒Y(jié)果寄存進(jìn)廣播Intent,然后傳給下一個(gè)接收者。再總結(jié)說說兩種廣播的區(qū)別比較:一般廣播:異步,數(shù)據(jù)不共享,傳遞效率高有序廣播:同步,數(shù)據(jù)能夠達(dá)到共享,傳遞效率低說了這么一大堆,是不是都暈,那就上實(shí)例吧實(shí)例1:發(fā)送一般廣播1、寫一個(gè)繼承于Bro

7、adcastReceiver的類,并重寫onReceiver方式j(luò)avaviewplaincopyprint?packagecom.jiahui.broadcast;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.widget.Toast;publicclassMyBroadcastReceiverextendsBroadcastReceiverOverridepublicvoidonReceive(Contextco

8、ntext,Intentintent)Toast.makeText(context,”接收到的Intent的Action為+intent.getAction()+n傳遞的消息內(nèi)容為+intent.getStringExtra(msg),Toast.LENGTH_LONG)在中注冊htmlviewplaincopyprint?5.在Activity中發(fā)送廣播javaviewplaincopyprint?packagecom.jiahui.broadcast;importandroid.app.Activity;importandroid.content.Intent;importandroid.

9、os.Bundle;importandroid.view.View;importandroid.widget.Button;publicclassBroadcastDemo1ActivityextendsActivitypublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);14.ButtonbtnSend=(Button)this.findViewByld(R.id.btnSend);btnSend.setOnClickListen

10、er(newView.OnClickListener()OverridepublicvoidonClick(Viewv)Intentintent=newIntent();/指定發(fā)送特定的BroadcastReceiverintent.setAction(com.jiahui.broadcast.mybroadcast);/帶一些消息內(nèi)容過去intent.putExtra(msg,我發(fā)過來的數(shù)據(jù)哦);sendBroadcast(intent););實(shí)現(xiàn)成效:發(fā)送普通廣播發(fā)送普通廣播接收到的Intent的Adi??跒閏om.JIdhuLbrodcast.mybrofidcast傳遞的消息內(nèi)容為我發(fā)

11、過來的數(shù)據(jù)啜實(shí)例2:發(fā)送有序廣播寫兩個(gè)BroadcastReceiver類MyReceiver01.java:javaviewplaincopyprint?packagecom.jiahui.broadcast;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.Toast;publicclassMyReceiver1extendsBroadcastReceiv

12、erpublicvoidonReceive(Contextcontext,Intentintent)System.out.println(MyReceiveU-onReceive-);StringreceiverMsg=intent.getStringExtra(msg);System.out.println(receiverMsg:+receiverMsg);Toast.makeText(context,”接收到的Intnet的action+intent.getAction()+n發(fā)過來的消息內(nèi)容:+receiverMsg,5000).show();Bundlebundle=newBundl

13、e();bundle.putString(first,第一個(gè)廣播接收者給的數(shù)據(jù));/放入下一個(gè)結(jié)果中,讓下一個(gè)廣播接收者收到消息setResultExtras(bundle);javaviewplaincopyprint?packagecom.jiahui.broadcast;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.Toast;publicclass

14、MyReceiver2extendsBroadcastReceiverOverridepublicvoidonReceive(Contextcontext,Intentintent)System.out.println(-MyReceiver2-onReceive-);取到結(jié)果Bundlebundle=getResultExtras(true);StringreceiverMsg=bundle.getString(first);System.out.println(receiverMsg:+receiverMsg);Toast.makeText(context,”接收到的Intnet的acti

15、on+intent.getAction()+n發(fā)過來的消息內(nèi)容:+receiverMsg,5000).show();在中文件注冊,同時(shí)設(shè)置為優(yōu)先級htmlviewplaincopyprint?11.注意:那個(gè)地址兩個(gè)廣播接收者設(shè)置的action是一樣開發(fā)Activity在Activity中發(fā)送有序廣播消息javaviewplaincopyprint?packagecom.jiahui.broadcast;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.vi

16、ew.View;importandroid.widget.Button;publicclassBroadcastDemo2ActivityextendsActivitypublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);ButtonbtnSend=(Button)this.findViewById(R.id.btnSend);btnSend.setOnClickListener(newView.OnClickListener()O

17、verridepublicvoidonClick(Viewv)20.Intentintent=newIntent();intent.setAction(com.jiahui.broadcast.myreceiver););intent.putExtra(msg,發(fā)給第一個(gè)接收者的數(shù)據(jù)發(fā)送有序廣播sendOrderedBroadcast(intent,null););實(shí)現(xiàn)成效:發(fā)送有序廣播接收到的Intnet的actionmmJlBhuLbroadcast.myreceIver發(fā)過來的消息內(nèi)容:發(fā)皓第一個(gè)接收者的數(shù)據(jù)當(dāng)一段時(shí)刻咱們就能夠夠看到又會彈出一個(gè)信息如以下圖:也能夠通過操縱臺監(jiān)視:11-140733pl-1407.3J11-14073111-14073JrSyste號?營taSystereceiverMsg發(fā)愴采一個(gè)幫收卷的數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論