首页 > 代码库 > Intent 匹配规则
Intent 匹配规则
本文翻译自Android API Guide,并经过整理.
1.action测试:
一个过滤器中可以定义零个或多个action,如果Intent不包含action,那么它通过此项测试.如果Intent包含的action,那么需要和过滤器中的action匹配(相同)才能通过测试.如果过滤器不定义action,任何Intent都不能通过测试(包括不定义action的Intent).
2.category测试:
一个过滤器可以定义零个或多个category,如果Intent没有定义category,那么它通过测试,如果Intent中定义了category那么其中的每一个category都要在过滤器中匹配到才能通过测试.需要注意的是通过startActivity()或 startActivityForResult()传入的implicit Intent在测试时Android自动包含了CATEGORY_DEFAULT,所以如果应用想要接收implicit Intent就必须包含 "android.intent.category.DEFAULT".
3.data测试:
一个过滤器可以定义零个或多个data,每个data可以定义一个mimeType和一个URI结构体.URI结构体的组成:
<scheme>://<host>:<port>/<path>
这四个域都是可选的,但是如果scheme没有定义,host会被忽略,如果host没有定义,port会被忽略,如果scheme和host都没有定义那么path会被忽略.path可以包含通配符"*".
当Intent中的URI和过滤中的URI对比时,仅对比过滤中定义的部分.
当Intent中的URI和MIMETYPE和过滤器中的对比时:
a.当Intent中没有包含任何URI和MIMETYPE时,只有过滤器没有定义任何URI和MIMETYPE时才能通过测试.
b.当Intent只包含URI没有包含MIMETYPE时,只有Intent中的URI匹配过滤器的URI且过滤器没有定义MIMETYPE时通过测试.
c.当Intent只包含MIMETYPE时,只有Intent中的MIMETYPE匹配过滤器的MIMETYPE且过滤器没有定义URI时通过测试.
d.当Intent同时包含URI和MIMETYPE时,这时进行两部分测试,一是测试Intent中的MIMETYPE和过滤器中的MIMETYPE是否匹配,二是测试URI是否匹配,如果过滤器没有定义URI,那么当Intent中的URI包含"file:"或"content:"时通过测试.特别注意,如果过滤器有定义URI,即使Intent中的URI包含"file:"或"content:"也不能通过测试,必须匹配才行.
Intent内容设置:
设置action使用setAction
设置category使用addCategory,可以增加多个
单独设置URI使用setData
单独设置MIMETYPE使用setType
同时设置URI和MIMETYPE使用setDataAndType
Intent 匹配规则
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。