Android-啟動(dòng)Activity通過(guò)<data> path URI

在?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>

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

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

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