以Activity為例评姨,Android的Activity的InterFilter一共有三種:action、category萤晴、data吐句。我們用Intent隱式啟動(dòng)時(shí)需要根據(jù)Activity的這三種標(biāo)簽進(jìn)行匹配胁后。Service與BroadcastReceiver同理。
匹配規(guī)則
一.action
action的匹配規(guī)則分為兩種情況:
1.沒有data標(biāo)簽嗦枢,或者說(shuō)只有action和category標(biāo)簽時(shí)择同,action要求Intent的action必須存在且和<intent-fileter>中的其中一個(gè)action相同。
2.有data標(biāo)簽時(shí)净宵,Intent只需要指定data標(biāo)簽(startActivity或startActivityForResult時(shí)系統(tǒng)默認(rèn)加上android.intent.category.DEFAULT標(biāo)簽,相當(dāng)于有category和data兩種標(biāo)簽)即可裹纳,無(wú)需指定action择葡,當(dāng)然指定也沒問(wèn)題。
二.category
1.需要隱式啟動(dòng)的Activity必須在<intent-fileter>中加上android.intent.category.DEFAULT標(biāo)簽剃氧;
2.Intent只加category標(biāo)簽啟動(dòng)Activity會(huì)報(bào)錯(cuò)敏储,必須配合action或者data使用;
3.Intent若未添加category標(biāo)簽朋鞍,startActivity或者startActivityForResult時(shí)會(huì)默認(rèn)加上android.intent.category.DEFAULT標(biāo)簽已添。
4.Intent若含有category,則所有的category都必須與<intent-fileter>中的其中一個(gè)相同滥酥。
三.data
1.Activity若含有data標(biāo)簽更舞,則Intent必須要有與之匹配的data。
2.data的語(yǔ)法:
<data android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:mimeType="string"/>
Scheme:URI的模式坎吻。
Host:URI主機(jī)名
Port:URI端口號(hào)
Path缆蝉、pathPattern、pathPrefix:表述路徑信息瘦真,path標(biāo)識(shí)完整的路徑信息刊头;pathPattern也表示完整路徑信息,但是它里面可以包含通配符"",""表示0個(gè)或多個(gè)任意字符诸尽;pathPrefix表示路徑的前綴信息原杂。
其中string代表字符串,如android:mimeType="image/*"您机,data標(biāo)簽可以只有android:mimeType穿肄。如:
<data android:mimeType="image/*"/>
此時(shí)雖然沒有指定URI,但是Intent中的URI默認(rèn)是content或者file才能匹配际看。