在?Android?中使用?Intent?啟動(dòng)?Activity?時(shí),?category?不是必須的,但?data?是必須的。如果Intent中設(shè)置了data,則必須在?AndroidManifest.xml?中進(jìn)行相應(yīng)配置,否則啟動(dòng)會(huì)失敗12。
Intent?與?清單文件?的匹配規(guī)則
Action和Category:
Action:Intent中必須指定action,且intent中的action必須與intent-filter中的action完全一致(包括大小寫(xiě))。如果intent中沒(méi)有指定category,系統(tǒng)會(huì)自動(dòng)添加android.intent.category.DEFAULT,如果沒(méi)有這個(gè)category,匹配會(huì)失敗2。
Category:intent-filter中可以有多條category,intent中也允許有多條category。所有intent中的category必須在intent-filter中找到對(duì)應(yīng)的category才算匹配成功2。
Data:
Data:intent中只能設(shè)置一個(gè)data,如果intent-filter中指定了data,則intent中也必須指定其中的一個(gè)data。setType會(huì)覆蓋setData,反之亦然,因此需要使用setDataAndType方法來(lái)同時(shí)設(shè)置data和mimeType23。
示例代碼
java
Intent intent = new Intent();
intent.setAction("com.action.456");
intent.addCategory("android.intent.category.DEFAULT"); // 即使代碼里不寫(xiě),系統(tǒng)也會(huì)默認(rèn)添加
intent.setData(Uri.parse("http://456"));
startActivity(intent);
xml
<activity android:name=".SecondActivity">
? ? <intent-filter>
? ? ? ? <action android:name="com.action.123" />
? ? ? ? <action android:name="com.action.456" />
? ? ? ? <category android:name="android.intent.category.DEFAULT" />
? ? ? ? <data android:host="456" android:scheme="http" />
? ? </intent-filter>
</activity>