IntentFilter的匹配規則

學習記錄自《Android開發藝術探索》.

啓動Activity的兩種方式

1,顯示啓動 : 明確指出啓動對象的組件信息,包名,類名

Intent intent = new Intent(this,LaunchModeActivityStudy.class);
startActivity(intent);

2,隱式啓動:需要Intent能夠匹配目標組件的IntentFilter中設置的過濾信息

IntentFilter

過濾信息有:action,category,data.

<activity
            android:name=".NormalActivityLife"
            android:launchMode="singleInstance" >
            <intent-filter>
                <action android:name="com.ground.hao.a"/>
                <action android:name="com.ground.hao.b"/>
                <category android:name="com.ground.hao.c"/>
                <category android:name="com.ground.hao.d"/>
                <data android:mimeType="text/plain"/>
            </intent-filter>
        </activity>

1,需要同時匹配過濾列表中的action,category,data,否則匹配失敗.

2,多個action,category,data,只需每類匹配一個即可匹配成功.

3,一個Activity可以有多個IntentFilter,一個Intent匹配任何一組即可.

匹配規則

1,action的匹配規則:Intent中的action與過濾中action字符串值完全相同.action區分大小寫.

2,category的匹配規則:Intent中如果含義category,那麼必須與過濾規則中的一個category相同.默認情況下系統在調用startActivity和startActivityForResult時會爲Intent加上”android.intent.category.DEFAULT”.

3,data的匹配規則:與action類似,要求Intent中必須含有data數據.並且能夠完全匹配過濾規則中的一個.
tips:如果你在 data 標籤,既設置了 mimeType 又設置了 scheme 之內的,要爲Intent指定完整的data,必須調用setDataAndType方法.

Intent intent1 = new Intent();//action
        intent1.setAction("com.ground.hao.a");
        intent1.addCategory("com.ground.hao.d");
    intent1.setDataAndType(Uri.parse("file://abc"),"text/plain");
        startActivity(intent1);

data的值

scheme, host, port, path, pathPrefix, pathPattern 是用來匹配 Intent 中的 Data Uri 的.

scheme:URI的模式:http,file,content.

Host:URI的主機名:www.csdn.com

Port:URI的端口號

path 用來匹配完整的路徑

pathPrefix 用來匹配路徑的開頭部分

pathPattern 用表達式來匹配整個路徑.

匹配符號:
“*” 用來匹配0次或更多

“.” 用來匹配任意字符

“.*” 就是用來匹配任意字符0次或更多

轉義:
tips:由於正則表達式的規範,如果要表達真實的字符串 “*” 要寫成 “\*” , “\”要寫成”\\”.

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章