版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
組件通信與廣播消息本章學(xué)習(xí)內(nèi)容使用Intent進(jìn)行組件通信的原理使用Intent啟動Activity的方法獲取Activity返回值的方法Intent過濾器的原理與匹配機(jī)制發(fā)送和接收廣播消息的方法什么是IntentAndroid中一種消息傳遞機(jī)制,可以通過intent消息激活activity、service和broadcastreceiver。在運(yùn)行時(shí)綁定在同一應(yīng)用或不同應(yīng)用的組件。每個(gè)intent本身是一個(gè)Intent類的對象,是對一個(gè)執(zhí)行動作的抽象描述,包含了組件名(componentname)、動作(action)、數(shù)據(jù)(data)、類型(category)、附加信息(extra)和標(biāo)志(flags)信息。應(yīng)用A應(yīng)用B某組件某組件發(fā)送Intent系統(tǒng)啟動發(fā)送Intent組件名(componentname)接收intent的組件的名字。是目標(biāo)組件的完整且有效的類名稱(如“ject.FreneticActivity”)。組件名是可選的。如果設(shè)置,intent對象就發(fā)送給該類的實(shí)例;如果沒設(shè)置,Android會使用intent對象的其它信息去定位一個(gè)適合的目標(biāo)。動作(action)
待執(zhí)行的由字符串命名的動作。Intent類中定義了許多action常量,包括這些:數(shù)據(jù)(data)URI(UniformResourceIdentifier)標(biāo)識抽象和物理資源的字符串。資源標(biāo)識形式多樣:URL,URNURI={URL,URN,……}
URI語法成分<scheme>:<scheme-specific-part>scheme:Justastherearemanydifferentmethodsofaccesstoresources,thereareavarietyofschemesforidentifyingsuchresources.ItdefinesthesemanticsfortheremainderoftheURIstring.Android中的URIEachpartoftheURI:scheme://host:port/pathForexample,
content://ject:200/folder/subfolder/etctheschemeis"content",thehostis"ject",theportis"200",andthepathis"folder/subfolder/etc".ThehostandporttogetherconstitutetheURI
authority;ifahostisnotspecified,theportisignored.Eachoftheseattributesisoptional,buttheyarenotindependentofeachother:Foranauthoritytobemeaningful,aschememustalsobespecified.Forapathtobemeaningful,bothaschemeandanauthoritymustbespecified.
content://ject.healthcareprovider/nurses/rn數(shù)據(jù)(data)可以明確設(shè)設(shè)置intent對象中的數(shù)數(shù)據(jù)類型。。setData()方法僅指定定數(shù)據(jù)的URI,setType()僅指定數(shù)據(jù)據(jù)的MIME類型,setDataAndType()既指其定數(shù)數(shù)據(jù)的URI,又指定MIME類型。URI通過getData()獲得,類型型通過getType()獲得。類型(category)是一個(gè)字符符串,包含含了可以處理intent的這類組件件的其它信信息。在一個(gè)intent對象中可以放置任任意多個(gè)類類型描述。Intent類定義了很很多類型常常量:addCategory()方法是在intent對象中放入入一個(gè)category,removeCategory()將前前面面添添加加的的category刪除除,,getCategories()獲得得當(dāng)當(dāng)前前intent對象象中中的的所所有有category。附加加信信息息(extra)由一一些些鍵值值對對組成成,,是是發(fā)發(fā)送送給給處處理理intent的組組件件的的額額外外信信息息。。Key-valuepairsthatcarryadditionalinformationrequiredtoaccomplishtherequestedaction.一些些actions與特特殊殊的的extras相配配。例例如如,,ACTION_TIMEZONE_CHANGEDintent有有一一個(gè)個(gè)““time-zone“extra,,它它標(biāo)標(biāo)識識新新的的時(shí)時(shí)間間區(qū)區(qū),,ACTION_HEADSET_PLUGintent有有一一個(gè)個(gè)””state“extra表表示示耳耳機(jī)機(jī)是是否否現(xiàn)現(xiàn)在在處處于于插插入入狀狀態(tài)態(tài)。。putExtra(),twoparameters:thekeynameandthevalue.YoucanalsocreateaBundleobjectwithalltheextradata,theninserttheBundleintheIntentwithputExtras().Intent類類定定義義了了很很多多EXTRA_*,,見見文文檔檔標(biāo)志志((flags))各種種各各樣樣類類型型的的標(biāo)標(biāo)志志。。許許多多標(biāo)標(biāo)志志指指導(dǎo)導(dǎo)Android系統(tǒng)統(tǒng)怎怎樣樣啟啟動動一一個(gè)個(gè)activity(如如activity屬于于哪哪個(gè)個(gè)任任務(wù)務(wù))),,activity啟動動后后怎怎樣樣對對待待它它((如如,,是是否否它它應(yīng)應(yīng)被被放放入入最最近近activities列表表))。。所所有有這這些些標(biāo)標(biāo)志志在在Intent類中中定定義義。。Intent的的用用途途啟動動Activity和和Service在Android系系統(tǒng)統(tǒng)上上發(fā)發(fā)布布廣廣播播消消息息—可以以是是接接收收到到的的特特定定數(shù)數(shù)據(jù)據(jù)或或消消息息,,也也可可以以是是手手機(jī)機(jī)的的信信號號變變化化或或電電池池的的電電量量低低等等信信息息給每每種種組組件件發(fā)發(fā)送送intent都都有有不不同同的的機(jī)機(jī)制制啟動動Activity在Android系系統(tǒng)統(tǒng)中中,,應(yīng)應(yīng)用用程程序序一一般般都都有有多多個(gè)個(gè)Activity,,Intent可可以以實(shí)現(xiàn)現(xiàn)不不同同Activity之之間間的的切切換換和和數(shù)數(shù)據(jù)據(jù)傳傳遞遞啟動動Activity方方式式顯式式啟啟動動:必必須須在在Intent中中指指明明啟啟動動的的Activity隱式式啟啟動動:Intent無無需需指指明明具具體體啟啟動動哪哪一一個(gè)個(gè)Activity,,Android系系統(tǒng)統(tǒng)根根據(jù)據(jù)Intent的的action、data和category來決決定定啟啟動動哪哪一一個(gè)個(gè)Activity。。選選擇擇權(quán)權(quán)由由Android系系統(tǒng)統(tǒng)和和最最終終用用戶戶來來決決定定。。獲得得返返回回值值的的啟啟動動啟動動Activity顯式式啟啟動動創(chuàng)建建一一個(gè)個(gè)Intent((見見API中中android.content.Intent))指定定當(dāng)前前的的應(yīng)應(yīng)用用程程序序上上下下文文以及及要啟啟動動的的Activity把創(chuàng)創(chuàng)建建好好的的這這個(gè)個(gè)Intent作作為為參參數(shù)數(shù)傳傳遞遞給給startActivity()方法法Intentintent=newIntent(MainActivity.this,NewActivity.class);startActivity(intent);顯式式啟啟動動下面面用用IntentDemo為為例例說說明明如如何何使使用用Intent啟啟動動新新的的Activity。。程序序默默認(rèn)認(rèn)啟啟動動的的Activity是是MainActivity,,在在用用戶戶點(diǎn)點(diǎn)擊擊““啟啟動動Activity””按按鈕鈕后后,,程程序序啟啟動動NewActivity實(shí)現(xiàn)現(xiàn)步步驟驟:(1))在在AndroidManifest.xml文文件件中中注注冊冊這這兩兩個(gè)個(gè)Activity;;—使使用用<activity>標(biāo)標(biāo)簽簽,,嵌嵌套套在在<application>標(biāo)標(biāo)簽簽內(nèi)內(nèi)部部。。(2))創(chuàng)創(chuàng)建建兩兩個(gè)個(gè)Activity的的布布局局文文件件;;(3))編編寫寫MainActivity.java和和NewActivity.java文文件件。。隱式式啟啟動動不需需要要指指明明需需要要啟啟動動哪哪一一個(gè)個(gè)Activity,而而由由Android系系統(tǒng)統(tǒng)來來決決定定。。Android系系統(tǒng)統(tǒng)會會在在程程序序運(yùn)運(yùn)行行時(shí)時(shí)解解析析Intent,,并并根根據(jù)據(jù)一一定定的的規(guī)規(guī)則則對對Intent中中的的action、data和category與Activity的的intent過過濾濾器器中的的匹匹配配。。啟動動Activity匹配配的的組組件件可可以以是是程序序本本身身的Activity,,也也可可以以是是Android系統(tǒng)統(tǒng)內(nèi)內(nèi)置置應(yīng)應(yīng)用用的Activity,,還還可可以以是是第三三方方應(yīng)應(yīng)用用程程序序提提供供的的Activity。。這種種方方式式強(qiáng)強(qiáng)調(diào)調(diào)了了Android組組件件的的可可復(fù)復(fù)用用性性。。如果果程程序序開開發(fā)發(fā)人人員員希希望望啟啟動動一一個(gè)個(gè)瀏瀏覽覽器器,,查查看看指指定定的的網(wǎng)網(wǎng)頁頁內(nèi)內(nèi)容容,,卻卻不不能能確確定定具具體體應(yīng)應(yīng)該該啟啟動動哪哪一一個(gè)個(gè)Activity??程序序開開發(fā)發(fā)人人員員可可以以將將瀏覽覽動動作作和Web地地址址作為為參參數(shù)數(shù)傳傳遞遞給給Intent,,Android系系統(tǒng)統(tǒng)則則通通過過匹匹配配動動作作和和數(shù)數(shù)據(jù)據(jù)格格式式,,找找到到最最適適合合于于此此動動作作和和數(shù)數(shù)據(jù)據(jù)格格式式的的組組件件。。隱式式啟啟動動WebViewIntentDemo示示例例說說明明了了如如何何隱隱式式啟啟動動Activity,,用用戶戶界界面面獲取取Activity返返回回值值的的啟啟動動方方式式很多情況下下,后啟動動的Activity是為了讓用用戶對特定定信息進(jìn)行行選擇,在后啟動的的Activity關(guān)閉時(shí),這些信息息是需要返回給給先前啟動動的Activity。后啟動的Activity稱為“子Activity””,先啟動的的Activity稱為“父Activity””。如果需要將將子Activity的的信息返回回給父Activity,則可以使用獲取Activity返返回值的方方式啟動子子Activity。一般可以分分為以下三三個(gè)步驟::在父Activity中啟動動子Activity在子Activity中設(shè)置置返回值在父Activity中獲取取返回值在父Activity中啟動動子ActivitystartActivityForResult(Intent,requestCode):參數(shù)Intent:決定啟動哪哪個(gè)Activity;參數(shù)requestCode:請求碼;——所有子Activity返返回時(shí),Android系統(tǒng)都調(diào)用用父Activity的同一個(gè)處處理方法,,因此父Activity使用requestCode來確定數(shù)據(jù)是是哪一個(gè)子子Activity返回的顯式啟動子Activity的代代碼如下隱式啟動子Activity的代代碼如下intSUBACTIVITY1=1;Intentintent=newIntent(MainActivity.this,SubActivity1.class);startActivityForResult(intent,SUBACTIVITY1);intSUBACTIVITY2=2;Uriuri=Uri.parse("content://contacts/people");Intentintent=newIntent(Intent.ACTION_PICK,uri);startActivityForResult(intent,SUBACTIVITY2);在子Activity調(diào)用finish()關(guān)閉前前,調(diào)用setResult()設(shè)定需要返返回給父Activity的的數(shù)據(jù)。setResult(intresultCode,Intentdata)::resultCode:表示子Activity的的返回狀態(tài)態(tài),通常為為Activity.RESULT_OK(正正常返回?cái)?shù)數(shù)據(jù))或者者Activity.RESULT_CANCELED(取消返返回?cái)?shù)據(jù))),也可以以是自定義義的;data:封裝返回回?cái)?shù)據(jù)的一一個(gè)Intent對對象。返回回?cái)?shù)據(jù)主要要以Uri形式返回回給父Activity,此此外還可以以附加一些些附加信息息,這些附附加信息用用Extra的鍵值值對表示。。在子Activity中設(shè)置置返回值以下代碼說說明如何在在子Activity中設(shè)置置返回值:Uridata=Uri.parse("tel:"+tel_number);Intentresult=newIntent(null,data);result.putExtra("address","JDStreet");setResult(RESULT_OK,result);finish();在父Activity中獲取取返回值當(dāng)子Activity執(zhí)行finish()后后,父Activity的onActivityResult()方法會被調(diào)調(diào)用,用于于獲取子Activity的的返回值。。如果需要在在父Activity中處理理子Activity的返回回值,則重寫此方法。onActivityResult()方法如下::requestCode:請請求碼,用用來判斷結(jié)結(jié)果是哪一一個(gè)子Activity返回回的;resultCode:表示示子Activity的返回回狀態(tài);data::子Activity用Intent返回的數(shù)數(shù)據(jù)。根據(jù)據(jù)返回?cái)?shù)據(jù)據(jù)的用途不不同,Uri數(shù)據(jù)的的協(xié)議也不不同,也可可以使用Extra方法直接接返回?cái)?shù)據(jù)據(jù)本身。publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata);示例說明ActivityCommunicationDemo說明了如如何以獲取取Activity返回值方方式啟動子子Activity,以及如如何使用Intent進(jìn)行組組件間通信信。當(dāng)用戶點(diǎn)擊擊“啟動Activity1”和“啟啟動Activity2”按按鈕時(shí),程程序?qū)⒎謩e別啟動子Activity1和Activity2。思路?創(chuàng)建每一個(gè)個(gè)Activity的布局文文件編寫每一個(gè)個(gè)Activity的java代碼MainActivity.java:1、為兩個(gè)個(gè)按鈕設(shè)置置事件監(jiān)聽聽器:第一個(gè)按鈕鈕:以獲得得返回值方方式啟動Activity1;第二個(gè)按鈕鈕:以獲得得返回值方方式啟動Activity2;2、重寫onActivityResult():收到Activity1的返返回結(jié)果時(shí)時(shí),顯示““Activity1”,并并將Activity1返回回的輸入數(shù)數(shù)據(jù)也進(jìn)行行顯示,若若無則什么么也不顯示示;收到Activity2的返返回結(jié)果時(shí)時(shí),只顯示示“Activity2”。。Activity1.java:為““接受”和和“撤銷””按鈕設(shè)置置事件監(jiān)聽聽器?!敖邮堋保海簩⒕庉嬑奈谋究蜉斎肴氲膬?nèi)容作作為結(jié)果返返回給MainActivity,返返回狀態(tài)““OK”;;“撤銷”::返回“RESULT_CANCLED”狀態(tài)態(tài)給MainActivity。Activity2.java:為””關(guān)閉“按按鈕設(shè)置事事件監(jiān)聽器器。”關(guān)閉“::返回“RESULT_CANCLED”狀態(tài)態(tài)給MainActivity。?Intent過濾器(IntentFilter)它是Activity,service和broadcastreceiver用來告知系系統(tǒng)它們可可以處理什什么樣的隱隱式intent的一個(gè)類。。每個(gè)過濾器器描述這個(gè)個(gè)組件能力力的同時(shí),,描述了該該組件愿意接收的的intents。每個(gè)組件都都可以有一個(gè)或多個(gè)個(gè)intent過濾器。如何給組件件定義Intent過濾器通常在AndroidManifest.xml文件的各個(gè)個(gè)組件下定定義<intent-filter>元素,然后后在<intent-filter>元素中用<action>、<category>和<data>元素聲明該該組件所支支持的action、data和category信息。也可以在程程序代碼中中動態(tài)地為為組件設(shè)置置Intent過濾器。。元素屬性說明<action>android:name指定組件所能響應(yīng)的動作,用字符串表示,通常由Java類名和包的完全限定名構(gòu)成<category>android:name描述組件的其它特征如(Launcher,Home等)<data>android:scheme所需要的特定協(xié)議android:host指定一個(gè)有效的主機(jī)名android:port主機(jī)的有效端口號android:path有效的URI路徑名android:mimetype指定組件能處理的數(shù)據(jù)類型(多媒體數(shù)據(jù)類型)定義<data>Intent與與Intent過濾器的的匹配策策略Android將intent中的action,data和category與所有該該類組件件的intent過濾器中的比較較。只要要有一處處不同,,這個(gè)intent就不會被被發(fā)送給給那個(gè)組組件。一個(gè)組件件可以有有多個(gè)intent過濾器,,沒有匹匹配其中中一個(gè),,卻可能能匹配另另一個(gè)。。Intent與與Intent過濾器器的匹配配策略actiontest情況1:intent對象僅指指定單一一的action,intent過過濾器列列出一個(gè)個(gè)以上的的<action>時(shí),,只要有有一個(gè)匹匹配上,,就通過過action部分匹匹配;情況2:intent過濾濾器不包包含<action>,任何intent都不會匹匹配上;;情況3:如果intent對象沒指指定action,intent過濾濾器包含含至少一一個(gè)<action>,則匹配配通過。。Intent與與Intent過濾器器的匹配配策略categorytest情況1::intent對對象可有有多個(gè)category,每每一個(gè)category必須須匹配intent過過濾器中中的一個(gè)個(gè)category(過濾器器可以列列出多個(gè)個(gè)category)),就通通過category部分匹匹配。情況2::若intent對象未未指定category,系系統(tǒng)會默默認(rèn)為它它設(shè)置一一個(gè)category:““ent.category.DEFAULT”(CATEGORY_DEFAULT常量量)。所所以,愿愿意接收收隱式intent的的activities必須在intent過過濾器中中包含““ent.category.DEFAULT”。。Intent與與Intent過濾器器的匹配配策略datatest—僅僅比較在在intent過濾器器中提到的URI部部分和數(shù)據(jù)類型型?!狪ntent過過濾器中中path部分分可以使使用通配配符,即即pathPattern。Intent與與Intent過濾器器的匹配配策略datatest規(guī)規(guī)則:無URI,無數(shù)據(jù)類類型的intent,僅當(dāng)當(dāng)intent過濾器器也未指指定任何何URI和數(shù)據(jù)據(jù)類型時(shí)時(shí)。通過過data部分分匹配測測試。有URI,無數(shù)據(jù)類類型的intent(且數(shù)據(jù)據(jù)類型不不能從URI提提?。?,,僅當(dāng)其其URI與intent過濾濾器中的的URI匹配時(shí)時(shí)(過濾濾器沒指指定數(shù)據(jù)據(jù)類型)),通過過data部分分匹配測測試。如如:不引引用實(shí)際際數(shù)據(jù)的的mailto:和tel:。有數(shù)據(jù)類類型,無URI的intent,僅當(dāng)當(dāng)intent過濾器器也列出出相同數(shù)數(shù)據(jù)類型型且沒指指定URI時(shí),,通過data部分匹匹配測試試。既有URI又有有數(shù)據(jù)類類型(或數(shù)據(jù)據(jù)類型可可以從URI中中提?。┑膇ntent,僅僅當(dāng)它的的數(shù)據(jù)類類型匹配配過濾器器列出的的類型之之一時(shí),,通過數(shù)數(shù)據(jù)類型型部分的的匹配檢檢測。如果intent的URI匹匹配過濾濾器中的的一個(gè)URI或intent有一個(gè)個(gè)content:或或file:URI而而過濾器器沒有指指定URI時(shí),,該intent通過過URI部分匹匹配測試試。換句話說說,組件默認(rèn)認(rèn)支持content:和file:的數(shù)數(shù)據(jù),盡盡管其intent過過濾器中中僅列出出了數(shù)據(jù)據(jù)類型。。IntentResolutionDemo示例例當(dāng)應(yīng)用程程序安裝裝到Android系統(tǒng)時(shí),,AndroidManifest.xml文件中所所有的組組件和Intent過濾器都都會注冊冊到Android系統(tǒng)中。。這樣,Android系統(tǒng)便可可以將任任何一個(gè)個(gè)Intent請求通過過Intent過濾器映映射到相相應(yīng)的組組件上。。Intent與廣播消消息Intent的另一用用途是發(fā)送廣播播消息,應(yīng)用程程序和Android系統(tǒng)都可可以使用用Intent發(fā)送廣播播消息。。廣播消息息的內(nèi)容容:與應(yīng)用用程序密密切相關(guān)關(guān)的數(shù)據(jù)據(jù)信息,,Android的系統(tǒng)信信息,如如網(wǎng)絡(luò)連連接變化化、電池池電量低低、接收收到短信信或系統(tǒng)統(tǒng)設(shè)置變變化等。。應(yīng)用程序序中注冊冊了BroadcastReceiver,則可以以接收到到指定的的廣播消消息。注冊BroadcastReceiverYoucaneitherdynamicallyregisteraninstanceofthisclasswithregisterReceiver()orstaticallypublishanimplementationthroughthe<receiver>taginyourAndroidManifest.xml.Note:IfregisteringareceiverinyourActivity.onResume()implementation,youshouldunregisteritinActivity.onPause().(Youwon'treceiveintentswhenpaused,andthiswillcutdownonunnecessarysystemoverhead).Donotunregist
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年家長與學(xué)校共同打造學(xué)生成長檔案合同3篇
- 醫(yī)療設(shè)備售后服務(wù)與客戶關(guān)系維護(hù)
- 在線辦公時(shí)代下的農(nóng)產(chǎn)品直銷新模式-以網(wǎng)絡(luò)直播為例
- 醫(yī)療倫理與患者溝通的藝術(shù)
- 2025中國鐵塔貴州分公司招聘32人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國石化貴州貴陽石油分公司加油站營業(yè)員招聘45人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國電信集團(tuán)限公司春季校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國大唐集團(tuán)限公司福建分公司校招高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國農(nóng)業(yè)科學(xué)院農(nóng)產(chǎn)品加工研究所谷物加工與品質(zhì)調(diào)控創(chuàng)新團(tuán)隊(duì)博士后公開招聘3人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025東方電氣招聘452人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- DL∕T 802.7-2023 電力電纜導(dǎo)管技術(shù)條件 第7部分:非開挖用塑料電纜導(dǎo)管
- 品味化學(xué)電源發(fā)展史
- 《植物營養(yǎng)學(xué)》課件
- 代收個(gè)人款項(xiàng)聲明書
- 貨源保障協(xié)議書
- JBT 14685-2023 無油渦旋空氣壓縮機(jī) (正式版)
- 2024會計(jì)事務(wù)所保密協(xié)議范本
- 2024年遼寧生態(tài)工程職業(yè)學(xué)院單招職業(yè)技能測試題庫各版本
- 中秋國慶慰問品采購?fù)稑?biāo)方案
- 20K607 防排煙及暖通防火設(shè)計(jì)審查與安裝
- 《統(tǒng)計(jì)建模與R軟件》書本課后習(xí)題答案
評論
0/150
提交評論