本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、Want 匹配规则

Want 是 HarmonyOS 中用于启动应用组件(如 Ability)的核心对象,分为两种类型:

  • 显式 Want:明确指定目标组件(bundleName + abilityName)

  • 隐式 Want:通过描述意图(action、uri、type 等)由系统匹配符合条件的组件

二、显式 Want 匹配规则

显式 Want 必须指定 bundleName 和 abilityName,系统直接定位目标组件。

字段 类型 是否参与匹配 规则说明
deviceId string 留空则仅匹配本设备组件
bundleName string ✅ 必选 必须设置,否则匹配失败
moduleName string 留空时,若应用内多模块有重名组件,默认匹配第一个
abilityName string ✅ 必选 必须设置,表示显式匹配
uri / type / action / entities - 系统匹配时忽略,但会传递给目标组件
flags number 不参与匹配,用于设置运行时行为(如 URI 授权)
parameters Object 自定义数据,直接传递给目标组件

备注:显式匹配成功条件:bundleName + abilityName 正确且存在。

三、隐式 Want 匹配规则

隐式 Want 不指定 abilityName,系统根据以下字段匹配 skills 配置:

字段 是否参与匹配 规则说明
deviceId 跨设备暂不支持隐式调用
abilityName 必须留空,否则视为显式
bundleName / moduleName 可选,用于限定应用或模块范围
uri / type / action / entities 必须与目标组件的 skills 配置匹配
parameters 支持 linkFeature 优先匹配机制

备注: 隐式匹配流程:系统遍历所有已安装组件的 skills,与 Want 参数进行匹配。

四、隐式 Want 各属性匹配规则

1. action 匹配规则

Want 中 action Skills 中 actions 结果
失败
非空 失败
非空 成功
非空 包含该 action 成功
非空 不包含该 action 失败

2. entities 匹配规则

Want 中 entities Skills 中 entities 结果
非空 成功
成功
非空 失败
非空 包含所有 entities 成功
非空 不包含所有 entities 失败

3. uri 和 type 匹配规则

情况一:两者都为空
  • Skills 中 uris 为空 → 成功

  • Skills 中某 uri 的 scheme 和 type 为空 → 成功

  • 否则 → 失败

情况二:uri 非空,type 为空
  • Skills 中 uris 为空 → 失败

  • 存在 uri 匹配且 type 为空 → 成功

  • 若 uri 为文件路径,根据后缀推断 MIME 类型匹配 → 成功

情况三:uri 为空,type 非空
  • Skills 中 uris 为空 → 失败

  • 存在 uri 的 scheme 为空且 type 匹配 → 成功

情况四:两者都非空
  • Skills 中 uris 为空 → 失败

  • 存在 uri 和 type 均匹配 → 成功

4. uri 详细匹配规则(逐级匹配)

s_uri 配置 匹配条件
scheme 为空 w_uri 必须为空
host 为空 w_uri 的 scheme 必须相同
port 为空 w_uri 的 scheme + host 必须相同
path/pathStartWith/pathRegex 为空 w_uri 的 scheme + host + port 必须相同
path 非空 全路径必须完全一致
pathStartWith 非空 w_uri 必须包含此前缀
pathRegex 非空 w_uri 必须满足正则表达式

备注:w_是指want中的参数

5. type 匹配规则

s_type w_type 结果
任意 失败
*/* 或 w_type = */* 任意 成功
prefixType/* 包含 prefixType/ 成功
任意 prefixType/* s_type 包含 prefixType/ 则成功

备注:w_是指want中的参数,s_是指skills配置中的参数

6. linkFeature 匹配规则(优先匹配)

仅在 parameters 中包含 linkFeature 键且非空时生效。

  • Want 中 uri 和 type 均为空

    • 只匹配 linkFeature,相等则成功

  • Want 中 uri 或 type 非空

    • 依次匹配 linkFeature → uri → type,全部成功才成功

五、总结:隐式匹配成功条件

普通匹配(无 linkFeature):

必须同时满足:

  • action 匹配成功

  • entities 匹配成功

  • uri 匹配成功

  • type 匹配成功

带 linkFeature 的匹配:

  • 优先匹配 linkFeature

  • 若 linkFeature 匹配成功,再根据是否设置 uri/type 决定是否继续匹配

注意事项

  • 显式 Want 必须指定 bundleName 和 abilityName

  • 隐式 Want 中 abilityName 必须留空

  • linkFeature 为高级匹配机制,优先于普通属性匹配

  • 系统应用 URI 的 scheme 以 ohos 开头,三方应用不得重复使用

  • 跨设备场景下不支持隐式 Want 调用

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐