示例:
分析各属性的匹配规则:
Action的匹配规则:
action是一个字符串,系统预定义了一些action,同时我们也可以在应用中定义自己的action。action的匹配规则是Intent中的action必须能够和过滤规则中的action匹配,这里说的是匹配是指action的字符串值完全一样。一个过滤规则中可以有多个action,那么只要Intent中的action能够和过滤规则中的任何一个action相同即可匹配成功。针对上面额过滤规则,只要我们Intent中action值为”com.ryg.charpter_1.c”或者“com.ryg.charpter_1.d”都能匹配成功。需要注意的是,Intent中如果没有指定action,那么匹配失败。稍总一下,action的匹配要求Intent中的action存在且必须和过滤规则中的其中一个action相同,这里需要注意它和category匹配规则的不同。另外,action区分大小写,大小写不同字符串相同的action会匹配失败。
category的匹配规则:
category是一个字符串,系统预定义了写category,同时我们可以在应用中定义自己的category。category的匹配规则和action不同,它要求intent中如果含有category,那么所有的category都必须和过滤规则中的其中一个category相同。简言之
intent中如果出现category,不管出现几个category,对于每个category来说,它必须是过滤规则中已经定义了的category,当然,Intent可以没有category,如果没有category的话,按照上面的描述,这个Intent仍然可以匹配成功。这里要注意下它和action匹配过程的不同,action是要求intent中必须有一个action且必须能够和过滤规则中的某个action相同,而category要求Intent可以没有category,但是你如果一旦有actegory,不管有几个,每个都要能够和过滤规则中的任何一个category相同。为了匹配前面的过滤规则中的category,我们可以写出下面的Intent,intent.addcategory(”com.ryg.category.c”)或者Intent.addcategory(“com.ryg.category.d”)亦或者不设置category。为什么不设置category也可以匹配呢??原因是系统在调用startAtivity或者startActivityForResult的时候会默认为INtent加上“android.intent.category.DEFAULT”这个category,所以这个category就可以匹配前面的过滤规则中的第三个category.同时,为了我们的activity能够接受隐试调用,就必须在intent-filter中指定“android.intent.category.DEFAULT”,这个categry,原因刚才已经说明。
data的匹配规则:
data的匹配规则和action类似,如果过滤规则中定义了data,那么Intent中必须也要定义可匹配的data。