Intent 匹配规则

本文翻译自Android API Guide,并经过整理.


Intent 匹配规则:做三项测试:action,data,category
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
 
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值