action的匹配规则
- action在Intent-filter中可以设置多条
- intent中的action和intent-filter中的action必须完全一样时(包括大小写)才算匹配成功
- intent中的action只要与intent-filter其中的一条匹配成功即可
- intent中必须指定action否则匹配失败且intent中action最多只有一条
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.test.a"/>
<action android:name="com.test.b"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
隐式启动:
button.setOnClickListener {
val intent = Intent("com.test.a")
startActivity(intent)
}
category的匹配规则
- category在intent-filter中可以有多条
- category在intent中也可以有多条
- intent中所有的category都可以在intent-filter中找到一样的(包括大小写)才算匹配成功
- 通过intent启动Activity的时候如果没有添加category会自动添加android.intent.category.DEFAULT,如果intent-filter中没有添加android.intent.category.DEFAULT则会匹配失败
data的匹配规则
data的语法
<data
android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string"/>
例如:
scheme://host:port/path|pathPrefix|pathPattern
http://www.baidu.com:80/search
- intent-filter中可以设置多个data
- intent中只能设置一个data
- intent-filter中指定了data,intent中就要指定其中的一个data
- setType会覆盖setData,setData会覆盖setType,因此需要使用setDataAndType方法来设置data和mimeType
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="goods"
android:path="/goodsDetail"
android:port="8888"
android:scheme="detail" />
</intent-filter>
</activity>
button.setOnClickListener {
val intent = Intent()
intent.action = Intent.ACTION_VIEW
intent.data = Uri.parse("detail://goods:8888/goodsDetail?id=100")
startActivity(intent)
}
本文详细介绍了Android中Activity隐式启动时,Intent的action、category及data的匹配规则。强调了action必须完全一致,category需全部匹配,而data部分则要求intent-filter中有指定的数据类型。同时指出,若未明确指定category,系统会默认添加android.intent.category.DEFAULT,缺少此category会导致匹配失败。
3318

被折叠的 条评论
为什么被折叠?



