InterFilter的匹配規(guī)則

先附上Activity常用的flags:
Flag_Activity_New_TASK:指定"singleTask"啟動模式洲敢,效果與xml里指定相同椰棘。
Flag_Activity_SINGLE_TOP:指定"singleTop"模式捏萍,同上漂佩。
Flag_ACTIVITY_CLEAR_TOP:同任務(wù)棧中所有位于它之上的Activity全部出棧咒锻。一般配合singleTask(默認此效果)使用(調(diào)用onNewIntent),如果啟動模式是"standard"模式啟動比规,那么該包括自己和他之上Activity全部出棧,再重新創(chuàng)建該實例入棧讥邻。
Flag_ACTIVITY_EXCLUDE_FROM_RECENTS:此標記Activity不會出現(xiàn)在歷史列表中迫靖,在某些情況中如果不希望用戶通過歷史列表返回到該Activity比較有用,等同于xml里"android:excludeFromRecents=true"兴使。

啟動Activity分顯示和隱式兩種系宜,原則上一個intent不該既是顯示調(diào)用又是隱式調(diào)用,如果兩者共存发魄,以顯示調(diào)用為主盹牧。隱式調(diào)用需要通過intent去匹配目標組件的IntentFilter中所設(shè)置的過濾信息,如果不匹配励幼,目標Activity無法啟動汰寓。
IntentFilter有action,category,data三種苹粟。

IntentFilter中action有滑,category,data可以有多個,所有的action嵌削,category,data分別構(gòu)成不同類別毛好,同一類別共同約束當前類別匹配過程。
一個Activity中可以有多個intent-filter,而一個Intent只要能匹配任何一組intent-filter即可掷贾。

action匹配規(guī)則:action是一個字符串睛榄,系統(tǒng)預(yù)定義了一些action,應(yīng)用中也可以自定義action想帅。
Intent的action必須和intent-filter里的action完全匹配场靴,如果intent-filter里有多個action,那么Intent里的action只要能完全匹配任意一個即可。
注:action字符串區(qū)分大小寫。

category匹配規(guī)則:category是一個字符串旨剥,系統(tǒng)預(yù)定義了一些category咧欣,應(yīng)用中也可以自定義category。
與action不同的時轨帜,Intent中如果含有category,那么所有的category必須和intent-filter里的其中一個category相同魄咕。即Inten里出現(xiàn)了category,不管有多少個蚌父,所有的category必須和intent-filter里定義的category哮兰。
Intent里可以沒有category,如果沒有按上面的定義也可以匹配成功苟弛,這是因為系統(tǒng)會默認為Intent加上"android.intent.category.DEFAULT"這個category(注:如果Intent里沒用category而又想隱式調(diào)用的話喝滞,必須在intent-filter里定義"android.intent.category.DEFAULT"這個category)。

data的匹配規(guī)則與action類似膏秫,不過結(jié)構(gòu)比較復(fù)雜右遭。
data由兩部分組成:mimeTyoe(?媒體類型),URI(包含數(shù)據(jù)較多)
URL構(gòu)成:
Scheme:URL的模式缤削,比如http,file,content等窘哈。如果URL里沒指定,整個URL的其它參數(shù)無效亭敢,這也意味URL無效滚婉。
Host:URL的主機名,比如www.baidu.com帅刀,如果Host未指定满哪,整個URL的其它參數(shù)無效,這也意味URI無效劝篷。
Port:URI的端口號,比如80民宿,僅當URL中指定了Scheme和Host參數(shù)后娇妓,Port才是有效的。
Path,pathPatterm和pathPrefix:這三個參數(shù)表示路徑信息活鹰,path表示完整路徑信息哈恰;pathPatterm也表示路徑完整信息,但是它可以包含通配符"",""表示0個或多個任意字符(注:由于正則表達式的規(guī)范志群,如果想表示真實的字符串""要寫成"\",""要寫成"\\");pathPrefix表示路徑的前綴信息着绷。
舉例:

 <intent-filter>
           <data android:mimeType="image/*"/>
            </intent-filter>

該規(guī)則指定了媒體類型為所有類型圖片,那么Intent中的mimeType必須為"image/*"才能匹配锌云。注:此時URI的默認值為content和file荠医。所以intent里URI的schema必須為content或file才能匹配。

 Intent intent = new Intent();
 intent.setDataAndType(Uri.parse("file://abc"),"image/png");

注:如果為intent指定完整data,必須調(diào)用setDataAndType。不能先調(diào)用setData再調(diào)用setType彬向,因為這兩個方法會彼此清除對方的值兼贡。

intent-filter的匹配規(guī)則對Service和BroadcastReceiver同樣使用,不過系統(tǒng)推薦對于Service盡量使用顯示調(diào)用娃胆。

最后遍希,當隱式調(diào)用啟動Activity時候,最好做一下判斷是否有Activity能匹配隱式啟動里烦,如果不做判斷會拋出異常:


Paste_Image.png

判斷方法有兩種:
PackagerManager的resolveActivity或IntentresolveActivity方法凿蒜。如果沒有匹配的返回值為null.另PackagerManager的queryIntentActivitys方法則返回的成功匹配的Activity信息。
PackagerManager兩個方法需要的flags要使用MATCH_DEFULT_ONLY這個標記胁黑。這個標記含義是僅匹配intent-filter里的android.intent.category.DEFAULT"這個category废封,意義在于只要返回值不為null,那么啟動一定會成功别厘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虱饿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子触趴,更是在濱河造成了極大的恐慌氮发,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冗懦,死亡現(xiàn)場離奇詭異爽冕,居然都是意外死亡,警方通過查閱死者的電腦和手機披蕉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門颈畸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人没讲,你說我怎么就攤上這事眯娱。” “怎么了爬凑?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵徙缴,是天一觀的道長。 經(jīng)常有香客問我嘁信,道長于样,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任潘靖,我火速辦了婚禮穿剖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卦溢。我一直安慰自己糊余,他們只是感情好秀又,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啄刹,像睡著了一般涮坐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上誓军,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天袱讹,我揣著相機與錄音,去河邊找鬼昵时。 笑死捷雕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的壹甥。 我是一名探鬼主播救巷,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼句柠!你這毒婦竟也來了浦译?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤溯职,失蹤者是張志新(化名)和其女友劉穎精盅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谜酒,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡叹俏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了僻族。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粘驰。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖述么,靈堂內(nèi)的尸體忽然破棺而出蝌数,到底是詐尸還是另有隱情,我是刑警寧澤度秘,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布籽前,位于F島的核電站,受9級特大地震影響敷钾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肄梨,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一阻荒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧众羡,春花似錦侨赡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蓖宦。三九已至,卻和暖如春油猫,著一層夾襖步出監(jiān)牢的瞬間稠茂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工情妖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留睬关,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓毡证,卻偏偏與公主長得像电爹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子料睛,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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