學習記錄自《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:由於正則表達式的規範,如果要表達真實的字符串 “*” 要寫成 “\*” , “\”要寫成”\\”.