IntentFilter匹配

Intent不應(yīng)該同時(shí)存在顯示調(diào)用及隱示調(diào)用,同時(shí)存在時(shí)以顯示調(diào)用為準(zhǔn) 。隱式調(diào)用需要Intent能夠匹配目標(biāo)組件的IntentFilter中所設(shè)置的過濾信息,如果不匹配將無法啟動(dòng)目標(biāo)組件。

IntentFilter的過濾信息有:action, category, data 。

匹配規(guī)則:

  • 需同時(shí)匹配過濾列表中的action, category, data信息,否則匹配失敗
  • 一個(gè)過濾列表中action, category, data可以有多個(gè),一個(gè)Activity可以有多個(gè)IntentFilter
  • 一個(gè)Intent只要能匹配任何一組IntentFilter就可以成功啟動(dòng)組件

各屬性的匹配規(guī)則:

action的匹配規(guī)則

  • action是一個(gè)字符串,可以是系統(tǒng)預(yù)定義的,也可以定義自己的
  • 匹配是指完全相同,區(qū)分大小寫。
  • 只要能夠和過濾規(guī)則中任何一個(gè)action匹配即可匹配成功。
  • 如果Intent沒有指定 action,那么失敗。

category的匹配規(guī)則

  • category是一個(gè)字符串,可以是系統(tǒng)預(yù)定義的,也可以定義自己的
  • Intent中category可以有多個(gè),每一個(gè)都必須與過濾規(guī)則中的一個(gè)category相同
  • 如果Intent中沒有設(shè)置category,默認(rèn)會加上android.intent.category.DEFAULT這個(gè)categroy
  • 為了組件能接收隱式調(diào)用,就必須在intent-filter中指定android.intent.category.DEFAULT這個(gè)categroy(由于上面原因)

data的匹配規(guī)則

  • Intent中必須有data,data數(shù)據(jù)能完全匹配過濾規(guī)則中的某個(gè)data
  • data語法
<data android:scheme="string"
    android:host="string"
    android:port="string"
    android:path="string"
    android:pathPattern="string"
    android:pathPrefix="string"
    android:mimeType="string"/>

data由mimeType 和 URI 兩部分組成。

mimeType指媒體類型,如image/jpeg、audio/meeg4-generic和video/*等
URI結(jié)構(gòu):
<sheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

URI如果沒有指定,schema默認(rèn)值為content和file。
為Intent指定完整的data,必須調(diào)用setDataAndType方法,不能調(diào)用setData后再試用setType,因?yàn)閮蓚€(gè)方法會相互清空對方的值。

其它

  • 入口intent-filter
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
  • 判斷是否有Activity可以匹配隱式Intent
    intent.resolveActivity(PackageManager pm)返回null表示找不到匹配
PackageManager pManager = this.getPackageManager();
List<ResolveInfo> list=pManager.queryIntentActivities(intent,flags);
if(list==null){
//沒有找到匹配的
}

ResolveInfo rf=pManager.resolveActivity(intent,flags);
if(rf==null){
//沒有找到匹配的
}

flags指定MATCH_DEFAULT_ONLY這個(gè)標(biāo)志位,僅匹配intent-filter中聲明了<category android:name="android.intent.category.DEFAULT"/>這個(gè)category的Activity。用此參數(shù),如果查出的不為空,一定成功。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 畢業(yè)后分別的我們進(jìn)入了那個(gè)未知而又期待的大學(xué)世界 我們滿腔熱血 正要大展身手 變成心中那個(gè)美麗的自己 但不可避免地...
    智慧嘻嘻閱讀 188評論 0 0
  • 好友莉莉過來找我的時(shí)候,我正捧著平板在玩祖瑪。她吃驚地看著我不停地打出五顏六色的球,過了這一關(guān)。 ...
    曾婭閱讀 623評論 0 3

友情鏈接更多精彩內(nèi)容