IntentFilter 的匹配规则 (p28 pdf 43)
Activity 的隐式调用需要 Intent 能够匹配目标组件的 IntentFilter 中所设置的过滤信息。IntentFilter 的过滤信息有 action 、category 、data
1> 一个 Intent 只有完全匹配 action 类别、category 类别、data 类别才算完全匹配,才可以成功启动目标 Activity。
2> 一个 Activity 可以有多个 IntentFilter ,一个 Intent 只要能够匹配任何一组 IntentFilter 即可成功启动目标 Activity。
图一(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 可以这样写(图二)
图二