安卓組件通信與廣播消息_第1頁
安卓組件通信與廣播消息_第2頁
安卓組件通信與廣播消息_第3頁
安卓組件通信與廣播消息_第4頁
安卓組件通信與廣播消息_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

組件通信與廣播消息本章學習內容使用Intent進行組件通信的原理使用Intent啟動Activity的方法獲取Activity返回值的方法Intent過濾器的原理與匹配機制發(fā)送和接收廣播消息的方法什么是IntentAndroid中一種消息傳遞機制,可以通過intent消息激活activity、service和broadcastreceiver。在運行時綁定在同一應用或不同應用的組件。每個intent本身是一個Intent類的對象,是對一個執(zhí)行動作的抽象描述,包含了組件名(componentname)、動作(action)、數(shù)據(jù)(data)、類型(category)、附加信息(extra)和標志(flags)信息。應用A應用B某組件某組件發(fā)送Intent系統(tǒng)啟動發(fā)送Intent組件名(componentname)接收intent的組件的名字。是目標組件的完整且有效的類名稱(如“ject.FreneticActivity”)。組件名是可選的。如果設置,intent對象就發(fā)送給該類的實例;如果沒設置,Android會使用intent對象的其它信息去定位一個適合的目標。動作(action)

待執(zhí)行的由字符串命名的動作。Intent類中定義了許多action常量,包括這些:數(shù)據(jù)(data)URI(UniformResourceIdentifier)標識抽象和物理資源的字符串。資源標識形式多樣: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)可以明確設設置intent對象中的數(shù)數(shù)據(jù)類型。。setData()方法僅指定定數(shù)據(jù)的URI,setType()僅指定數(shù)據(jù)據(jù)的MIME類型,setDataAndType()既指其定數(shù)數(shù)據(jù)的URI,又指定MIME類型。URI通過getData()獲得,類型型通過getType()獲得。類型(category)是一個字符符串,包含含了可以處理intent的這類組件件的其它信信息。在一個intent對象中可以放置任任意多個類類型描述。Intent類定義了很很多類型常常量:addCategory()方法是在intent對象中放入入一個category,removeCategory()將前前面面添添加加的的category刪除除,,getCategories()獲得得當當前前intent對象象中中的的所所有有category。附加加信信息息(extra)由一一些些鍵值值對對組成成,,是是發(fā)發(fā)送送給給處處理理intent的組組件件的的額額外外信信息息。。Key-valuepairsthatcarryadditionalinformationrequiredtoaccomplishtherequestedaction.一些些actions與特特殊殊的的extras相配配。例例如如,,ACTION_TIMEZONE_CHANGEDintent有有一一個個““time-zone“extra,,它它標標識識新新的的時時間間區(qū)區(qū),,ACTION_HEADSET_PLUGintent有有一一個個””state“extra表表示示耳耳機機是是否否現(xiàn)現(xiàn)在在處處于于插插入入狀狀態(tài)態(tài)。。putExtra(),twoparameters:thekeynameandthevalue.YoucanalsocreateaBundleobjectwithalltheextradata,theninserttheBundleintheIntentwithputExtras().Intent類類定定義義了了很很多多EXTRA_*,,見見文文檔檔標志志((flags))各種種各各樣樣類類型型的的標標志志。。許許多多標標志志指指導導Android系統(tǒng)統(tǒng)怎怎樣樣啟啟動動一一個個activity(如如activity屬于于哪哪個個任任務務)),,activity啟動動后后怎怎樣樣對對待待它它((如如,,是是否否它它應應被被放放入入最最近近activities列表表))。。所所有有這這些些標標志志在在Intent類中中定定義義。。Intent的的用用途途啟動動Activity和和Service在Android系系統(tǒng)統(tǒng)上上發(fā)發(fā)布布廣廣播播消消息息—可以以是是接接收收到到的的特特定定數(shù)數(shù)據(jù)據(jù)或或消消息息,,也也可可以以是是手手機機的的信信號號變變化化或或電電池池的的電電量量低低等等信信息息給每每種種組組件件發(fā)發(fā)送送intent都都有有不不同同的的機機制制啟動動Activity在Android系系統(tǒng)統(tǒng)中中,,應應用用程程序序一一般般都都有有多多個個Activity,,Intent可可以以實現(xiàn)現(xiàn)不不同同Activity之之間間的的切切換換和和數(shù)數(shù)據(jù)據(jù)傳傳遞遞啟動動Activity方方式式顯式式啟啟動動:必必須須在在Intent中中指指明明啟啟動動的的Activity隱式式啟啟動動:Intent無無需需指指明明具具體體啟啟動動哪哪一一個個Activity,,Android系系統(tǒng)統(tǒng)根根據(jù)據(jù)Intent的的action、data和category來決決定定啟啟動動哪哪一一個個Activity。。選選擇擇權權由由Android系系統(tǒng)統(tǒng)和和最最終終用用戶戶來來決決定定。。獲得得返返回回值值的的啟啟動動啟動動Activity顯式式啟啟動動創(chuàng)建建一一個個Intent((見見API中中android.content.Intent))指定定當前前的的應應用用程程序序上上下下文文以及及要啟啟動動的的Activity把創(chuàng)創(chuàng)建建好好的的這這個個Intent作作為為參參數(shù)數(shù)傳傳遞遞給給startActivity()方法法Intentintent=newIntent(MainActivity.this,NewActivity.class);startActivity(intent);顯式式啟啟動動下面面用用IntentDemo為為例例說說明明如如何何使使用用Intent啟啟動動新新的的Activity。。程序序默默認認啟啟動動的的Activity是是MainActivity,,在在用用戶戶點點擊擊““啟啟動動Activity””按按鈕鈕后后,,程程序序啟啟動動NewActivity實現(xiàn)現(xiàn)步步驟驟:(1))在在AndroidManifest.xml文文件件中中注注冊冊這這兩兩個個Activity;;—使使用用<activity>標標簽簽,,嵌嵌套套在在<application>標標簽簽內內部部。。(2))創(chuàng)創(chuàng)建建兩兩個個Activity的的布布局局文文件件;;(3))編編寫寫MainActivity.java和和NewActivity.java文文件件。。隱式式啟啟動動不需需要要指指明明需需要要啟啟動動哪哪一一個個Activity,而而由由Android系系統(tǒng)統(tǒng)來來決決定定。。Android系系統(tǒng)統(tǒng)會會在在程程序序運運行行時時解解析析Intent,,并并根根據(jù)據(jù)一一定定的的規(guī)規(guī)則則對對Intent中中的的action、data和category與Activity的的intent過過濾濾器器中的的匹匹配配。。啟動動Activity匹配配的的組組件件可可以以是是程序序本本身身的Activity,,也也可可以以是是Android系統(tǒng)統(tǒng)內內置置應應用用的Activity,,還還可可以以是是第三三方方應應用用程程序序提提供供的的Activity。。這種種方方式式強強調調了了Android組組件件的的可可復復用用性性。。如果果程程序序開開發(fā)發(fā)人人員員希希望望啟啟動動一一個個瀏瀏覽覽器器,,查查看看指指定定的的網網頁頁內內容容,,卻卻不不能能確確定定具具體體應應該該啟啟動動哪哪一一個個Activity??程序序開開發(fā)發(fā)人人員員可可以以將將瀏覽覽動動作作和Web地地址址作為為參參數(shù)數(shù)傳傳遞遞給給Intent,,Android系系統(tǒng)統(tǒng)則則通通過過匹匹配配動動作作和和數(shù)數(shù)據(jù)據(jù)格格式式,,找找到到最最適適合合于于此此動動作作和和數(shù)數(shù)據(jù)據(jù)格格式式的的組組件件。。隱式式啟啟動動WebViewIntentDemo示示例例說說明明了了如如何何隱隱式式啟啟動動Activity,,用用戶戶界界面面獲取取Activity返返回回值值的的啟啟動動方方式式很多情況下下,后啟動動的Activity是為了讓用用戶對特定定信息進行行選擇,在后啟動的的Activity關閉時,這些信息息是需要返回給給先前啟動動的Activity。后啟動的Activity稱為“子Activity””,先啟動的的Activity稱為“父Activity””。如果需要將將子Activity的的信息返回回給父Activity,則可以使用獲取Activity返返回值的方方式啟動子子Activity。一般可以分分為以下三三個步驟::在父Activity中啟動動子Activity在子Activity中設置置返回值在父Activity中獲取取返回值在父Activity中啟動動子ActivitystartActivityForResult(Intent,requestCode):參數(shù)Intent:決定啟動哪哪個Activity;參數(shù)requestCode:請求碼;——所有子Activity返返回時,Android系統(tǒng)都調用用父Activity的同一個處處理方法,,因此父Activity使用requestCode來確定數(shù)據(jù)是是哪一個子子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調用finish()關閉前前,調用setResult()設定需要返返回給父Activity的的數(shù)據(jù)。setResult(intresultCode,Intentdata)::resultCode:表示子Activity的的返回狀態(tài)態(tài),通常為為Activity.RESULT_OK(正正常返回數(shù)數(shù)據(jù))或者者Activity.RESULT_CANCELED(取消返返回數(shù)據(jù))),也可以以是自定義義的;data:封裝返回回數(shù)據(jù)的一一個Intent對對象。返回回數(shù)據(jù)主要要以Uri形式返回回給父Activity,此此外還可以以附加一些些附加信息息,這些附附加信息用用Extra的鍵值值對表示。。在子Activity中設置置返回值以下代碼說說明如何在在子Activity中設置置返回值:Uridata=Uri.parse("tel:"+tel_number);Intentresult=newIntent(null,data);result.putExtra("address","JDStreet");setResult(RESULT_OK,result);finish();在父Activity中獲取取返回值當子Activity執(zhí)行finish()后后,父Activity的onActivityResult()方法會被調調用,用于于獲取子Activity的的返回值。。如果需要在在父Activity中處理理子Activity的返回回值,則重寫此方法。onActivityResult()方法如下::requestCode:請請求碼,用用來判斷結結果是哪一一個子Activity返回回的;resultCode:表示示子Activity的返回回狀態(tài);data::子Activity用Intent返回的數(shù)數(shù)據(jù)。根據(jù)據(jù)返回數(shù)據(jù)據(jù)的用途不不同,Uri數(shù)據(jù)的的協(xié)議也不不同,也可可以使用Extra方法直接接返回數(shù)據(jù)據(jù)本身。publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata);示例說明ActivityCommunicationDemo說明了如如何以獲取取Activity返回值方方式啟動子子Activity,以及如如何使用Intent進行組組件間通信信。當用戶點擊擊“啟動Activity1”和“啟啟動Activity2”按按鈕時,程程序將分別別啟動子Activity1和Activity2。思路?創(chuàng)建每一個個Activity的布局文文件編寫每一個個Activity的java代碼MainActivity.java:1、為兩個個按鈕設置置事件監(jiān)聽聽器:第一個按鈕鈕:以獲得得返回值方方式啟動Activity1;第二個按鈕鈕:以獲得得返回值方方式啟動Activity2;2、重寫onActivityResult():收到Activity1的返返回結果時時,顯示““Activity1”,并并將Activity1返回回的輸入數(shù)數(shù)據(jù)也進行行顯示,若若無則什么么也不顯示示;收到Activity2的返返回結果時時,只顯示示“Activity2”。。Activity1.java:為““接受”和和“撤銷””按鈕設置置事件監(jiān)聽聽器?!敖邮堋保海簩⒕庉嬑奈谋究蜉斎肴氲膬热葑髯鳛榻Y果返返回給MainActivity,返返回狀態(tài)““OK”;;“撤銷”::返回“RESULT_CANCLED”狀態(tài)態(tài)給MainActivity。Activity2.java:為””關閉“按按鈕設置事事件監(jiān)聽器器。”關閉“::返回“RESULT_CANCLED”狀態(tài)態(tài)給MainActivity。?Intent過濾器(IntentFilter)它是Activity,service和broadcastreceiver用來告知系系統(tǒng)它們可可以處理什什么樣的隱隱式intent的一個類。。每個過濾器器描述這個個組件能力力的同時,,描述了該該組件愿意接收的的intents。每個組件都都可以有一個或多個個intent過濾器。如何給組件件定義Intent過濾器通常在AndroidManifest.xml文件的各個個組件下定定義<intent-filter>元素,然后后在<intent-filter>元素中用<action>、<category>和<data>元素聲明該該組件所支支持的action、data和category信息。也可以在程程序代碼中中動態(tài)地為為組件設置置Intent過濾器。。元素屬性說明<action>android:name指定組件所能響應的動作,用字符串表示,通常由Java類名和包的完全限定名構成<category>android:name描述組件的其它特征如(Launcher,Home等)<data>android:scheme所需要的特定協(xié)議android:host指定一個有效的主機名android:port主機的有效端口號android:path有效的URI路徑名android:mimetype指定組件能處理的數(shù)據(jù)類型(多媒體數(shù)據(jù)類型)定義<data>Intent與與Intent過濾器的的匹配策策略Android將intent中的action,data和category與所有該該類組件件的intent過濾器中的比較較。只要要有一處處不同,,這個intent就不會被被發(fā)送給給那個組組件。一個組件件可以有有多個intent過濾器,,沒有匹匹配其中中一個,,卻可能能匹配另另一個。。Intent與與Intent過濾器器的匹配配策略actiontest情況1:intent對象僅指指定單一一的action,intent過過濾器列列出一個個以上的的<action>時,,只要有有一個匹匹配上,,就通過過action部分匹匹配;情況2:intent過濾濾器不包包含<action>,任何intent都不會匹匹配上;;情況3:如果intent對象沒指指定action,intent過濾濾器包含含至少一一個<action>,則匹配配通過。。Intent與與Intent過濾器器的匹配配策略categorytest情況1::intent對對象可有有多個category,每每一個category必須須匹配intent過過濾器中中的一個個category(過濾器器可以列列出多個個category)),就通通過category部分匹匹配。情況2::若intent對象未未指定category,系系統(tǒng)會默默認為它它設置一一個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,僅當當intent過濾器器也未指指定任何何URI和數(shù)據(jù)據(jù)類型時時。通過過data部分分匹配測測試。有URI,無數(shù)據(jù)類類型的intent(且數(shù)據(jù)據(jù)類型不不能從URI提提取),,僅當其其URI與intent過濾濾器中的的URI匹配時時(過濾濾器沒指指定數(shù)據(jù)據(jù)類型)),通過過data部分分匹配測測試。如如:不引引用實際際數(shù)據(jù)的的mailto:和tel:。有數(shù)據(jù)類類型,無URI的intent,僅當當intent過濾器器也列出出相同數(shù)數(shù)據(jù)類型型且沒指指定URI時,,通過data部分匹匹配測試試。既有URI又有有數(shù)據(jù)類類型(或數(shù)據(jù)據(jù)類型可可以從URI中中提?。┑膇ntent,僅僅當它的的數(shù)據(jù)類類型匹配配過濾器器列出的的類型之之一時,,通過數(shù)數(shù)據(jù)類型型部分的的匹配檢檢測。如果intent的URI匹匹配過濾濾器中的的一個URI或intent有一個個content:或或file:URI而而過濾器器沒有指指定URI時,,該intent通過過URI部分匹匹配測試試。換句話說說,組件默認認支持content:和file:的數(shù)數(shù)據(jù),盡盡管其intent過過濾器中中僅列出出了數(shù)據(jù)據(jù)類型。。IntentResolutionDemo示例例當應用程程序安裝裝到Android系統(tǒng)時,,AndroidManifest.xml文件中所所有的組組件和Intent過濾器都都會注冊冊到Android系統(tǒng)中。。這樣,Android系統(tǒng)便可可以將任任何一個個Intent請求通過過Intent過濾器映映射到相相應的組組件上。。Intent與廣播消消息Intent的另一用用途是發(fā)送廣播播消息,應用程程序和Android系統(tǒng)都可可以使用用Intent發(fā)送廣播播消息。。廣播消息息的內容容:與應用用程序密密切相關關的數(shù)據(jù)據(jù)信息,,Android的系統(tǒng)信信息,如如網絡連連接變化化、電池池電量低低、接收收到短信信或系統(tǒng)統(tǒ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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論