《Android移動應(yīng)用開發(fā)》Intent與應(yīng)用間的通信_第1頁
《Android移動應(yīng)用開發(fā)》Intent與應(yīng)用間的通信_第2頁
《Android移動應(yīng)用開發(fā)》Intent與應(yīng)用間的通信_第3頁
《Android移動應(yīng)用開發(fā)》Intent與應(yīng)用間的通信_第4頁
《Android移動應(yīng)用開發(fā)》Intent與應(yīng)用間的通信_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Intent2023/9/28082023/9/28認(rèn)識Intent構(gòu)建Intent目錄CONTENT12解析Intent3參考教材:《Android應(yīng)用開發(fā)項目化教程》認(rèn)識Intent作用Intent是一個消息傳遞對象,可以使用它協(xié)助應(yīng)用之間的交互與通訊。Intent負(fù)責(zé)對應(yīng)用中一次操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對應(yīng)的組件,將Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。Intent不僅可用于應(yīng)用程序之間,也可用于應(yīng)用程序內(nèi)部的Activity/Service之間的交互。1認(rèn)識Intent啟動組件ActivitystartActivity()

startActivityForResult()ServicestartService()

bindService()BroadcastReceiversendBroadcast()sendOrderedBroadcast()sendStickyBroadcast()1認(rèn)識Intent兩種Intent顯式Intent按名稱(完全限定類名)指定要啟動的組件。通常用于自己的應(yīng)用中。IntentdownloadIntent=newIntent(this,DownloadService.class);downloadIntent.setData(Uri.parse(fileUrl));startService(downloadIntent);1認(rèn)識Intent兩種Intent隱式Intent不會指定特定的組件,而是聲明要執(zhí)行的常規(guī)操作,從而允許其他應(yīng)用中的組件來處理它。Uriuri=Uri.parse("");Intentit=newIntent(Intent.ACTION_VIEW,uri);startActivity(it);1Intent在通信過程中需要檢查相應(yīng)的權(quán)限,如果AndroidManifext.xml中沒有相應(yīng)的權(quán)限說明,則無法激活組件。認(rèn)識Intent兩種Intent驗證Activity用戶可能沒有任何應(yīng)用處理發(fā)送到startActivity()的隱式Intent。如果出現(xiàn)這種情況,則調(diào)用將會失敗,且應(yīng)用會崩潰。要驗證Activity是否會接收Intent,需要對Intent對象調(diào)用resolveActivity()。如果結(jié)果為非空,則至少有一個應(yīng)用能夠處理該Intent,且可以安全調(diào)用startActivity()。如果結(jié)果為空,則不應(yīng)使用該Intent。如有可能,您應(yīng)禁用發(fā)出該Intent的功能。1認(rèn)識Intent兩種Intent使用應(yīng)用選擇器如果有多個應(yīng)用響應(yīng)隱式Intent,且用戶可能希望每次使用不同的應(yīng)用,則應(yīng)采用顯式方式顯示選擇器對話框。1認(rèn)識Intent兩種Intent特別說明為了確保應(yīng)用的安全性,啟動Service時,請始終使用顯式Intent,且不要為服務(wù)聲明Intent過濾器。使用隱式Intent啟動服務(wù)存在安全隱患,因為您無法確定哪些服務(wù)將響應(yīng)Intent,且用戶無法看到哪些服務(wù)已啟動。從Android5.0(API級別21)開始,如果使用隱式Intent調(diào)用bindService(),系統(tǒng)會拋出異常。1構(gòu)建Intent組件名稱ComponentNameIntent對象通過組件來顯式設(shè)置Intent的訪問對象。指定的方法 setComponent(ComponentName)setClass(Context,Class)setClassName()通過getComponent()讀取組件。ComponentName對象是目標(biāo)組件的完全限定類名(如"com.android.mms.ui.ConversationList")和應(yīng)用程序所在的包在清單文件中的名字(如"com.android.mms")的組合。其中組件名字中的包部分不必一定和清單文件中的包名一樣。2構(gòu)建Intent操作ActionAction是一個字符串,是對Intent執(zhí)行動作的描述Action可以是系統(tǒng)預(yù)定義的,如:ACTION_CALLACTION_EDITACTION_MAINAction也可以是自己定義的字符串。自定義動作字符串應(yīng)該包含應(yīng)用程序包名前綴。通過setAction()方法設(shè)置,通過getAction()方法讀取。Action很大程度上決定了剩下的Intent如何構(gòu)建,特別是數(shù)據(jù)和附加字段。因此,應(yīng)該盡可能明確指定動作,并緊密關(guān)聯(lián)到其他Intent字段。2構(gòu)建Intent數(shù)據(jù)DataData是作用于Intent上的數(shù)據(jù)的Uri和數(shù)據(jù)的MIME類型。在Android中,傳給Intent的數(shù)據(jù)用Uri格式表示,因此需要使用Uri.parse()方法將字符串格式化。不同的動作有不同的數(shù)據(jù)規(guī)格。例如:ACTION_EDIT使用編輯文檔的UriACTION_CALL使用tel:URI和將撥打的號碼ACTION_VIEW使用http:Uri主要方法:setData()方法指定數(shù)據(jù)的UrisetType()指定MIME類型setDataAndType()指定數(shù)據(jù)的Uri和MIME類型(提倡使用本方法)getData()讀取UrigetType()讀取類型。2構(gòu)建Intent類別CategoryCategory是一個字符串,描述了應(yīng)該處理Intent的組件類型信息??梢栽谝粋€Intent對象中指定任意數(shù)量的類別描述。Intent類定義了許多Category常數(shù)。在AndroidManifest.xml中,ent.action.MAIN和ent

.category.LAUNCHER分別標(biāo)記Activity開始新的任務(wù)和轉(zhuǎn)到啟動列表界面。向Intent對象添加一個類別使用addCategory()方法,刪除一個之前添加的類別使用removeCategory()方法,獲取Intent對象中的所有類別使用getCategories()方法。2構(gòu)建Intent附加信息Extra攜帶完成請求操作所需的附加信息的鍵值對??梢允褂酶鞣NputExtra()方法添加附加數(shù)據(jù),每種方法均接受兩個參數(shù):鍵名和值。可以創(chuàng)建一個包含所有附加數(shù)據(jù)的Bundle對象,然后使用putExtras()將Bundle插入Intent中。Intentit=newIntent(Activity.this,Activity2.class);Bundlebundle=newBundle();bundle.putString(“msg","ThisisfromMainActivity!");it.putExtras(bundle);startActivity(it);2構(gòu)建Intent標(biāo)志Flags在Intent類中定義的、充當(dāng)Intent元數(shù)據(jù)的標(biāo)志。標(biāo)志可以指示Android系統(tǒng)如何啟動Activity(例如,Activity應(yīng)屬于哪個任務(wù)),以及啟動之后如何處理(例如,它是否屬于最近的Activity列表)。Intentintent=newIntent(this,xxx.class);intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);2解析Intent隱式Intent的執(zhí)行流程創(chuàng)建隱式Intent時,Android系統(tǒng)通過將Intent的內(nèi)容與在設(shè)備上其他應(yīng)用的清單文件中聲明的Intent過濾器進(jìn)行比較,從而找到要啟動的相應(yīng)組件。如果與Intent過濾器匹配,則系統(tǒng)將啟動該組件,并將其傳遞給對象。如果多個Intent過濾器兼容,則系統(tǒng)會顯示一個對話框,支持用戶選取要使用的應(yīng)用。3解析IntentIntent過濾器每個Intent過濾器均根據(jù)Intent的操作、數(shù)據(jù)和類別指定自身接受的Intent類型。定義Intent過濾器在AndroidManifest中,使用<intent-filter>元素為每個應(yīng)用組件聲明一個或多個Intent過濾器僅當(dāng)隱式Intent可以通過Intent過濾器之一傳遞時,系統(tǒng)才會將該Intent傳遞給應(yīng)用組件。3注意:顯式Intent始終會傳遞給其目標(biāo),無論組件聲明的Intent過濾器如何均是如此。解析IntentIntent過濾器包含元素action在name屬性中,聲明接受的Intent操作。該值必須是操作的文本字符串值,而不是類常量。data使用一個或多個指定數(shù)據(jù)URI(scheme、host、port、path等)各個方面和MIME類型的屬性,聲明接受的數(shù)據(jù)類型。category在name屬性中,聲明接受的Intent類別。該值必須是操作的文本字符串值,而不是類常量。3解析IntentIntent過濾器示例

3解析IntentIntent過濾器特別說明為了接收隱式Intent,必須將CATEGORY_DEFAULT類別包括在Intent過濾器中。方法startActivity()和startActivityForResult()將按照已申明CATEGORY_DEFAULT類別的方式處理所有Intent。如果未在Intent過濾器中聲明此類別,則隱式Intent不會解析為您的Activity??梢詣?chuàng)建一個包括多個action、data或category實例的過濾器。創(chuàng)建時,僅需確定組件能夠處理這些過濾器元素的任何及所有組合即可。使用Intent過濾器時,無法安全地防止其他應(yīng)用啟動組件。盡管Intent過濾器將組件限制為僅響應(yīng)特定類型的隱式Intent,但如果開發(fā)者確定您的組件名稱,則其他應(yīng)用有可能通過使用顯式Intent啟動您的應(yīng)用組件。如果必須確保只有您自己的應(yīng)用才能啟動您的某一組件,需要將該組件exported屬性設(shè)置為"false"。3解析IntentAction過濾規(guī)則Intent對象中指定的動作必須匹配Intent過濾器動作列表中的一個。如果Intent或Intent過濾器沒有指定一個動作,則:如果Intent過濾器沒有指定動作,沒有一個Intent被匹配,所有的Intent都檢測失敗,即沒有Intent能夠通過Intent過濾器;如果Intent對象沒有指定動作(但必須指定其他屬性),將自動通過檢查(前提是Intent過濾器的動作列表不為空)。3解析IntentCategory過濾規(guī)則Intent對象中的每個類別必須匹配Intent過濾器中的一個。即Intent過濾器能夠列出額外的類別,但是Intent對象中的類別都必須能夠在Intent過濾器中找到,只要有一個類別在Intent過濾器列表中沒有,就算類別檢測失敗。因此,原則上如果一個Intent對象中沒有類別(即類別字段為空),那么應(yīng)該總是通過類別測試,而不管Intent過濾器中有什么類別。但是有個例外,Android對待所有傳遞給Context.startActivity()的隱式Intent至少包含“ent.category.DEFAULT”類別。3解析IntentData過濾規(guī)則一個Intent對象既不包含Uri,也不包含數(shù)據(jù)類型:僅當(dāng)Intent過濾器也不指定任何Uri和數(shù)據(jù)類型時,才能通過檢測,否則不能通過。一個Intent對象包含Uri,但不包含數(shù)據(jù)類型:僅當(dāng)Intent過濾器也不

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論