IntentFilter 的匹配规则

2018-10-11  本文已影响0人  Yue_Q

1. 显示调用与隐式调用

  显示调用需要明确指定被启动对象的组件信息,包括类名与包名,隐式调用不需要明确指定组件信息。如果两者共存以显示调用为主。
  隐式调用需要 Intent 能够匹配目标组件的 IntentFilter 中过滤信息。过滤信息有 action,category,data。过滤信息可以有多个,只有一个 Intent 同时匹配 action,category,data 匹配成功才能启动目标 Activity 。
  注意:一个 Activity 可以有多个 intent-filter ,Intent 匹配任意一组 intent-filter 可以成功启动 Activity。

2. action 的匹配规则

   系统预定义了一些 action。一个过滤规则中可以有多个 action ,只要 Intent 中 action 能和过滤规则中任何一个 action 相同即可匹配成功。
  总结:与category匹配规则不同,action 的匹配要求 Intent 中的 action 存在且必须和过滤规则中的其中一个 action 相同,action 区分大小写。

3. category 的匹配规则

   系统预定义了一些 category ,它要求 Intent 中如果含有 category ,那么所有 category 都必须和过滤规则中的其中一个 category 相同
  注意:不设置 category 也能匹配,因为系统在调用 startActivity 或者 startActivityForResult 的时候会默认为 Intent 加上 "andorid.intent.category.DEFAULT", 为了能 Activity 能接收隐式调用,必须指定以上 category 。

4. data 的匹配规则

data 语法结构:由两部分组成 mimeType 和 URI。
mimeType:指的媒体类型,比如 image/jpeg,video/* 等。
URI:<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
content://com.example.mg:100/fold/subfolder/etc
http://www.axe.com:500/profile/info

<data android:scheme="string"
 android:host="string"
 android:port="string"
 android:path="string"
 android:pathPattern="string"
 android:pathPrefix="string"
 android:mimeType="string"/>

Scheme:URI的模式。如果URI中没有指定Scheme.那么整个URI无效。默认值为content 和 file。
Host:URI的host。比如www.axe.com。如果指定了scheme和port,path等其他参数,但是host未指定,那么整个URI无效;如果只指定了scheme,没有指定host和其他参数,URI是有效的。可以这样理解:一个完整的URI :http://www.axe.com:500/profile/info 我将后面的prot 和path“:500/profile/info ”去掉,这个URI任然有效。如果我单独将www.axe.com 那这个URI就无效了。
Port:URI端口,当URI指定了scheme 和 host 参数时port参数才有意义。
path:用来匹配完整的路径,如:http://example.com/blog/abc.html,这里将 path 设置为 /blog/abc.html 才能够进行匹配;
pathPrefix: 用来匹配路径的开头部分,拿上面的 Uri 来说,这里将 pathPrefix 设置为 /blog 就能进行匹配了;
pathPattern: 用表达式来匹配整个路径。

上一篇下一篇

猜你喜欢

热点阅读