本文翻译自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