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方法().