IntentFilter中包含的过滤类型有action,category,data三种信息,必须要三种全部分别匹配,才算Intent匹配成功启动Activity。当然,三种信息的匹配规则并不是完全相同的。除此以外,一个Activity可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成启动对应的Activity。
action的匹配规则:
action是一个字符串,系统定义了一些action,同时我们也可以在应用中定义我们自己的action。匹配的规则就是:要求Intent中的action存在,而且必须和过滤规则中的其中一个action相同。action区分大小写。
category的匹配规则:
category是一个字符串,系统定义了一些category,同时我们也可以自己定义category。匹配规则是:Intent中测category必须是intent-filter中category的子集(包括系统在嗲用startActivity()
或者startActivityForResult()
时,会给intent默认添加的"android.intent.category.DEFAULT"
这个category)。
data的匹配规则
匹配规则就是,intent中的data数据的范围必须是Intent-filter中指定data数据的范围的子集。除此之外,如果要为intent指定完整的data,必须要用setDataAndType方法,不能先后使用setData方法和setType方法,因为这两个方法彼此清除对方的值。
如果intent-filter没有指定URI,则URI的默认值是content和file。
下面两种intent-filter的作用是一样的。
<intent-filter>
<data android:scheme="file" android:host="www.baidu.com"/>
</intent-filter>
<intent-filter>
<data android:scheme"file"/>
<data android:host="www.baidu.com/>
</intent-filter>