Intent与IntentFilter匹配原则

Intent与IntentFilter匹配原则:

Intent(意图)与IntentFilter(意图过滤器)之间存在一定的关系,通过intent发送一个意图时,需要有指定的IntentFilter与其匹配,才可生效。优先公告注册IntentFilter,再发送intent的时候,会根据注册的intentFilter设定限

匹配共分为3个部分:action、data、category

1、action:动作部分,最先匹配此部分,只有这部分匹配成功才会往下走,匹配失败则直接返回

2、data:数据部分,包含数据URI(data)和数据类型(type),而数据URI部分又包括三个部分:

格式:scheme://host:port/path

例如:content://media/external/images/media/4

a、scheme:“content”部分

b、authority:host:port对应着authority部分,即"media"部分

c、path:“external/images/media/4”,此处对应着path部分

3、category:描述信息部分,最后匹配的部分,匹配完成后即可

IntentFilter匹配Intent的规则是,如果三块内容全部匹配,则表示匹配成功,否则,匹配失败。(IntentFilter的match方法)会先调用matchAction,然后是matchData,最后是matchCategories。当且仅当intent的action、data、category均在intentfilter内部注册时,才可匹配成功.

a、匹配action,如果intent未设置action,则可直接跳过,去匹配data;如果设置了action,则必须在Intentfilter中注册了才可匹配成功;

b、匹配data,匹配此处顺序为,先匹配scheme,然后匹配authority,接着是匹配path部分,最后才会匹配type,而前三者构成了数据的URI。

c、匹配category,此处匹配原则与action一直,如果设置了,则必须在intentfilter中注册了才可匹配成功。

如果顺序完成后,匹配成功,则表示找到了对应的处理者、接受者,可以正常跳转。


源码部分详见:IntentFilter的match方法().

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容