intentfilter中包括action,catagory,data。
一个activity可以有多个intentfilter,一个intent匹配任意一组intentfilter即可匹配成功。
?
action的匹配规则:
1.intentfilter中至少有一个action,可以有多个action,不然intent无法匹配。
2.intent中有且只有一个action。
3.intent中的action和intentfliter中的任意一个action匹配成功即可。
?
catagory的匹配规则:
1.除了主activity其他的activity需要隐式启动的intentfilter必须有
,这是默认的catagory
2.intent可以有0个或者多个catagory。
3.intent中有0个catagory肯定可以匹配成功,因为默认不指定catagory会在startactivity或者startactivityforresult中添加上默认的catagory。
4.intent如果有多个catagory必须都匹配成功才可以算catagory匹配成功。
?
data匹配规则:
1.data默认是两部分组成:mimetype和uri。mimetype是媒体类型。uri是多种数据组合而成,分别是scheme(uri模式),host(uri主机),port(uri端口号),path(uri地址)。
2.intentfilter中可以有0个或者多个data。
3.如果intentfilter中有data,则intent如果要与之匹配成功则必须要有data与之匹配成功。
4.如果intentfilter中没有data,则intent也要没有data,否则匹配不成功。
5.intent中的data与intentfliter中的任意一个data匹配成功即可。
6.intentfilter中没有指定uri,会有默认值content或者file,intent在此情况下需要指定uri为file或者content才能匹配成功,注意intent的uri为file时这里在7.0及以上的安卓版本还会有问题,后面再说。
7.intent中的setdata方法和settype方法会消除对方,这个从源码中可以看出来,所以intent如果既要设置类型,又要设置uri的话需要调用setdataandtype方法。