intent-filter的匹配規(guī)則

Intent有兩種,一種是顯式意圖,一種是隱式意圖。顯式意圖指定了具體要啟動(dòng)的Activity的類晴圾,所以當(dāng)你打算用顯式意圖啟動(dòng)某個(gè)Activity的時(shí)候,設(shè)置intent-filter是完全沒(méi)有用的噪奄。
對(duì)于每一個(gè)activity死姚,可以有任意數(shù)量的intent-filter,在隱式意圖的匹配過(guò)程當(dāng)中勤篮,只要匹配上了任意一個(gè)intent-filter都能啟動(dòng)這個(gè)Activity都毒。
intent-filter過(guò)濾intent根據(jù)三樣?xùn)|西,action碰缔,category和data账劲。

action

action是區(qū)分大小寫的字符串,一個(gè)intent-filter可以包含一個(gè)或多個(gè)action金抡。當(dāng)然瀑焦,一個(gè)action都沒(méi)有也是可以的,但是沒(méi)有action的intent-filter是無(wú)法被成功匹配的竟终。無(wú)論intent-filter里面有一個(gè)還是多個(gè)actions蝠猬,intent的action只要和intent-filter里面這些actions有一個(gè)完全相同就行切蟋。

category

category是區(qū)分大小寫的字符串统捶,一個(gè)intent-filter可以包含任意數(shù)量的category。但是如果希望intent-filter被成功匹配柄粹,category必須至少包含"android.intent.category.DEFAULT"喘鸟。category的匹配規(guī)則是intent的category一定是intent-filter里面列舉的幾個(gè)category之一,或者說(shuō)intent的category不能超出intent-filter所列舉的幾個(gè)category范圍之外驻右。

data

一個(gè)intent-filter里面可以有任意數(shù)量的data什黑,一個(gè)intent只能攜帶一個(gè)data(和type),我們認(rèn)為堪夭,只要intent的data愕把,完全符合intent-filter里面的任意一個(gè)data拣凹,就被認(rèn)為是匹配的岖寞。

<data
    android:host="sdcard"
    android:mimeType="video/mp4"
    android:path="/sdcard/1.MP4"
    android:pathPattern=".*\\.mp4"
    android:pathPrefix="/sdcard/"
    android:port="-2"
    android:scheme="file" />

data的結(jié)構(gòu)里面主要包含了兩個(gè)東西刹悴,mimeType和URI。

mimeType

mimeType是指媒體類型辰狡,是一個(gè)區(qū)分大小寫的字符串橘蜜。比如image/jpeg菊匿,video/mpeg等等。

URI

URI由許多元素組成计福,下面是URI的結(jié)構(gòu):

<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

具體的跌捆,比如:

file://sdcard/1.mp4
http://www.reibang.com/p/0321f33dff7f

  • scheme
    例如http、content象颖、file佩厚。
  • host
    URI的主機(jī)名,比如www.reibang.com说订。
  • port
    端口號(hào)可款。
  • path/pathPattern/pathPrefix
    path表示完整的路徑。pathPattern是判定完整路徑是否匹配用的正則表達(dá)式克蚂。pathPrefix也是正則表達(dá)式闺鲸,它匹配的是路徑的前綴信息。
匹配規(guī)則

intent的data完全符合intent-filter的data埃叭,意味著

  • 默認(rèn)的URI
    當(dāng)data當(dāng)中沒(méi)有配置任何的關(guān)于URI的參數(shù)的時(shí)候摸恍,scheme默認(rèn)為file或者content。
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="video/mp4" />
    <data android:mimeType="image/*" />
</intent-filter>

上面的這段代碼的作用是:當(dāng)前的Activity可以用于打開MP4赤屋,或者是任意圖片立镶。如果你有興趣可以去試一下,當(dāng)你點(diǎn)擊打開一張圖片的時(shí)候类早,系統(tǒng)會(huì)彈出多個(gè)應(yīng)用讓你來(lái)選擇用哪個(gè)應(yīng)用來(lái)打開這張圖片媚媒,這時(shí)候除了系統(tǒng)自帶的相冊(cè),我們的應(yīng)用也會(huì)赫然出現(xiàn)在列表中涩僻。

intent.setDataAndType(Uri.parse("file://sdcard/1.mp4"), "video/mp4");
intent.setDataAndType(Uri.parse("file://sdcard/1.jpeg"), "image/jpeg");

這是啟動(dòng)目標(biāo)Activity的intent的配置方法缭召。

隱式意圖匹配失敗的處理

隱式意圖一個(gè)很大的問(wèn)題就是我們并不知道系統(tǒng)里面是否有Activity能被匹配,比如如果你的手機(jī)里面一個(gè)查看圖片的Activity都沒(méi)有逆日,那么用相應(yīng)的intent隱式啟動(dòng)注定會(huì)失敗并且拋出異常嵌巷。所以在實(shí)際啟動(dòng)activity之前,最好是先做一下判斷室抽,比如:

intent.resolveActivity(getPackageManager());

如果返回的是null搪哪,則表示匹配失敗,否則會(huì)返回最佳匹配的Activity坪圾。除此之外我們還有一種方法晓折,可以返回所有成功匹配的Activity惑朦,像這樣:

getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
getPackageManager().queryIntentActivities(intent, PackageManager.GET_INTENT_FILTERS);
getPackageManager().queryIntentActivities(intent, PackageManager.GET_RESOLVED_FILTER);

最后說(shuō)一下一類特殊的intent-filter

<intent-filter>    
    <action android:name="android.intent.action.MAIN" />    
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

它們組合出現(xiàn)代表程序會(huì)出現(xiàn)在系統(tǒng)的應(yīng)用列表中,單獨(dú)出現(xiàn)沒(méi)有任何意義漓概。如果想獲得所有出現(xiàn)在應(yīng)用列表中的應(yīng)用行嗤,那么可以定義一個(gè)intent,用queryIntentActivities來(lái)獲取到匹配的所有Activit

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垛耳,一起剝皮案震驚了整個(gè)濱河市栅屏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堂鲜,老刑警劉巖栈雳,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缔莲,居然都是意外死亡哥纫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門痴奏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛀骇,“玉大人,你說(shuō)我怎么就攤上這事读拆∩勉荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵檐晕,是天一觀的道長(zhǎng)暑诸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)辟灰,這世上最難降的妖魔是什么个榕? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮芥喇,結(jié)果婚禮上西采,老公的妹妹穿的比我還像新娘。我一直安慰自己继控,他們只是感情好械馆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湿诊,像睡著了一般狱杰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厅须,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音食棕,去河邊找鬼朗和。 笑死错沽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的眶拉。 我是一名探鬼主播千埃,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼忆植!你這毒婦竟也來(lái)了放可?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤朝刊,失蹤者是張志新(化名)和其女友劉穎耀里,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拾氓,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冯挎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咙鞍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片房官。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖续滋,靈堂內(nèi)的尸體忽然破棺而出翰守,到底是詐尸還是另有隱情,我是刑警寧澤疲酌,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布潦俺,位于F島的核電站,受9級(jí)特大地震影響徐勃,放射性物質(zhì)發(fā)生泄漏事示。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一僻肖、第九天 我趴在偏房一處隱蔽的房頂上張望肖爵。 院中可真熱鬧,春花似錦臀脏、人聲如沸劝堪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)秒啦。三九已至,卻和暖如春搀玖,著一層夾襖步出監(jiān)牢的瞬間余境,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芳来,地道東北人含末。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像即舌,于是被迫代替她去往敵國(guó)和親佣盒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Intent簡(jiǎn)介Android中提供了Intent機(jī)制來(lái)協(xié)助應(yīng)用間的交互與通訊顽聂,Intent負(fù)責(zé)對(duì)應(yīng)用中一次操作的...
    Android_lml閱讀 957評(píng)論 1 7
  • Intent是一個(gè)消息傳遞對(duì)象肥惭,可以使用它向其他組件做一些請(qǐng)求操作。 盡管 Intent 可以通過(guò)多種方式促進(jìn)組件...
    Pan_大寶閱讀 1,164評(píng)論 0 4
  • 本文主要介紹了隱式Intent匹配目標(biāo)組件的規(guī)則紊搪,若有敘述不清晰或是不準(zhǔn)確的地方希望大家指出蜜葱,謝謝大家: ) In...
    absfree閱讀 1,773評(píng)論 0 7
  • 單是瞥見你角落里的靜等花開 就足矣傾注我半世的愛 你的一顰一笑 深深地觸動(dòng)我的神經(jīng) ...
    目一新閱讀 199評(píng)論 0 1
  • 教授講笼沥,不是認(rèn)識(shí)字的人,都能教語(yǔ)文娶牌!這是對(duì)自認(rèn)為誰(shuí)都能教語(yǔ)文奔浅,評(píng)價(jià)語(yǔ)文課的人錯(cuò)誤認(rèn)識(shí)的糾正,同時(shí)也是對(duì)語(yǔ)文教師提了...
    小水月閱讀 452評(píng)論 1 8