首页 > 编程笔记 > 通用技能 阅读:22

鸿蒙want对象:信息传递的载体(非常详细)

want 是一种对象,用于在应用组件之间传递信息,一种常见的使用场景是作为 startAbility() 方法的参数。

例如,当 UIAbilityA 需要启动 UIAbilityB 并向 UIAbilityB 传递一些数据时,可以使用 want 作为一个载体,将数据传递给 UIAbilityB。

下图展示的是 want 的用法示例:


图 1 want的用法示例

want的类型

want 的类型分为显式 want 和隐式 want。

使用显式 want 启动目标应用组件时,调用方传入的 want 参数中指定了 abilityName 和 bundleName,通常用于在当前应用中启动已知的目标应用组件。

使用隐式 want 启动目标应用组件时,调用方传入的 want 参数中未指定 abilityName,用于在当前应用中使用其他应用提供的某个能力,由系统匹配声明支持该请求的应用来处理请求。

注意,因为系统中待匹配应用组件的匹配情况不同,使用隐式 want 启动应用组件时会出现以下 3 种情况:

显式want与隐式want的匹配规则

在启动目标应用组件时,会通过显式 want 或者隐式 want 进行目标应用组件的匹配,这里说的匹配规则就是调用方传入的 want 参数中设置的参数如何与目标应用组件声明的配置文件进行匹配。

1) 显示want匹配规则

显示 want 匹配规则如下表所示:

表:显示want匹配规则
名称 类型 匹配项 必选项 选则
deviceId string 若留空,则将仅匹配本设备内的应用组件
bundleName string 如果指定 abilityName,而不指定 bundleName,则匹配失败
moduleName string 若留空,则当同一个应用内存在多个模块且模块间存在重名应用组件时,将默认匹配第一个
abilityName string 该字段必须设置,表示显式匹配
uri string 系统匹配时将忽略该参数,但仍可作为参数传递给目标应用组件
type string 系统匹配时将忽略该参数,但仍可作为参数传递给目标应用组件
action string 系统匹配时将忽略该参数,但仍可作为参数传递给目标应用组件
entities Array 系统匹配时将忽略该参数,但仍可作为参数传递给目标应用组件
flags number 不参与匹配,直接传递给系统处理,一般用来设置运行态信息,例如URI数据授权等
parameters [key: string]: Object 不参与匹配,应用自定义数据将直接传递给目标应用组件

2) 隐式want匹配规则

隐式 want 匹配规则如下表所示:

表:隐式want匹配规则
名称 类型 匹配项 必选项 选则
deviceId string 跨设备目前不支持隐式调用
abilityName string 该字段必须留空,表示隐式匹配
bundleName string 匹配对应应用包内的目标应用组件
moduleName string 匹配对应 Module 内的目标应用组件
uri string 参见 want 参数的 uri 和 type 匹配规则
type string 参见 want 参数的 uri 和 type 匹配规则
action string 参见 want 参数的 action 匹配规则
entities Array 参见 want 参数的 entities 匹配规则
flags number 不参与匹配,直接传递给系统处理,一般用来设置运行态信息,例如URI数据授权等
parameters [key: string]: Object 不参与匹配,应用自定义数据将直接传递给目标应用组件

从隐式 want 的定义可知,传入的 want 参数表明调用方需要执行的操作,并提供相关数据以及其他应用类型限制。

待匹配应用组件的 skills 配置,声明其具备的能力(module.json5 配置文件中的 skills 标签参数)。

系统将调用方传入的 want 参数(包含 action、entities、uri 和 type 属性)与已安装待匹配应用组件的 skills 配置(包含 actions、entities、uri 和 type 属性)依次进行匹配:

3) want参数的action匹配规则

将调用方传入的 want 参数的 action 属性与待匹配应用组件的 skills 配置中的 actions 属性进行匹配,如下图所示:


图 2 want参数的action与skills配置中的actions进行匹配

4) want参数的entities匹配规则

将调用方传入的 want 参数的 entities 与待匹配应用组件的 skills 配置中的 entities 进行匹配,如下图所示:


图 3 want参数的entities与skills配置中的entities进行匹配

相关文章