四大组件_Activity_IntentFilter 的匹配规则

IntentFilter 的匹配规则 (p28 pdf 43)

Activity 的隐式调用需要 Intent 能够匹配目标组件的 IntentFilter 中所设置的过滤信息。IntentFilter 的过滤信息有 action 、category 、data

1> 一个 Intent 只有完全匹配 action 类别、category 类别、data 类别才算完全匹配,才可以成功启动目标 Activity。

2> 一个 Activity 可以有多个 IntentFilter ,一个 Intent 只要能够匹配任何一组 IntentFilter 即可成功启动目标 Activity。


四大组件_Activity_IntentFilter 的匹配规则_第1张图片
图一

(1)action 匹配的规则

action 是字符串,系统定义或自定义。

action 的匹配规则指 Intent 中的 action 与过滤规则中的 action 字符串值完全一样。

一个过滤规则中可以有多个 action,Intent 中的 action 只要能够匹配其中任何一个即为成功。

如果 Intent 中 没有指定 action,匹配失败

(2)category 的匹配规则

category是字符串,系统定义或自定义。

一个过滤规则可以有多个 category,Intent 中如果有 category ,则不管有多少个都要每一个都匹配规则才算匹配成功。

因为系统在调用startActivity这样的方法时会默认为 Intent 加上 “android.intent.category.DEFAULT”这个 category ,所以 Intent 中不带 category 也能匹配成功成功

(3)data 的匹配规则

data 由 mimeType 和 URI 两部分组成。

data 匹配规则与 action 类似,要求 Intent 中必须含有 data 数据,并且 data 数据能够匹配过滤规则中的某一个 data。

data 匹配需要匹配 mimeType 和 URI 。过滤规则的 URI 在不指定时系统默认指定值为 content 和 file。需要注意

学习完这些匹配规则后写一个完全匹配图一的 Intent 可以这样写(图二)


图二

你可能感兴趣的:(四大组件_Activity_IntentFilter 的匹配规则)