Intent-Filter的匹配規則

示例:

















分析各屬性的匹配規則:

Action的匹配規則:
action是一個字符串,系統預定義了一些action,同時我們也可以在應用中定義自己的action。action的匹配規則是Intent中的action必須能夠和過濾規則中的action匹配,這裏說的是匹配是指action的字符串值完全一樣。一個過濾規則中可以有多個action,那麼只要Intent中的action能夠和過濾規則中的任何一個action相同即可匹配成功。針對上面額過濾規則,只要我們Intent中action值爲”com.ryg.charpter_1.c”或者“com.ryg.charpter_1.d”都能匹配成功。需要注意的是,Intent中如果沒有指定action,那麼匹配失敗。稍總一下,action的匹配要求Intent中的action存在且必須和過濾規則中的其中一個action相同,這裏需要注意它和category匹配規則的不同。另外,action區分大小寫,大小寫不同字符串相同的action會匹配失敗。

category的匹配規則:
category是一個字符串,系統預定義了寫category,同時我們可以在應用中定義自己的category。category的匹配規則和action不同,它要求intent中如果含有category,那麼所有的category都必須和過濾規則中的其中一個category相同。簡言之
intent中如果出現category,不管出現幾個category,對於每個category來說,它必須是過濾規則中已經定義了的category,當然,Intent可以沒有category,如果沒有category的話,按照上面的描述,這個Intent仍然可以匹配成功。這裏要注意下它和action匹配過程的不同,action是要求intent中必須有一個action且必須能夠和過濾規則中的某個action相同,而category要求Intent可以沒有category,但是你如果一旦有actegory,不管有幾個,每個都要能夠和過濾規則中的任何一個category相同。爲了匹配前面的過濾規則中的category,我們可以寫出下面的Intent,intent.addcategory(”com.ryg.category.c”)或者Intent.addcategory(“com.ryg.category.d”)亦或者不設置category。爲什麼不設置category也可以匹配呢??原因是系統在調用startAtivity或者startActivityForResult的時候會默認爲INtent加上“android.intent.category.DEFAULT”這個category,所以這個category就可以匹配前面的過濾規則中的第三個category.同時,爲了我們的activity能夠接受隱試調用,就必須在intent-filter中指定“android.intent.category.DEFAULT”,這個categry,原因剛纔已經說明。

data的匹配規則:
data的匹配規則和action類似,如果過濾規則中定義了data,那麼Intent中必須也要定義可匹配的data。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章