华为鸿蒙 Want:应用组件之间信息传递的桥梁

55 阅读5分钟

踏入鸿蒙世界的敲门砖,标志着您在技术征途上的全新起点,提升就业竞争力,获得行业认可,点亮职业成长先机,快人一步抢占未来应用开发赛道!developer.huawei.com/consumer/cn…

本文旨在深入探讨华为鸿蒙HarmonyOS NEXT系统(截至目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

在华为鸿蒙系统中,应用组件之间的信息传递是通过 Want 对象实现的。Want 对象可以携带各种信息,例如目标组件的名称、参数、数据等,从而实现应用组件之间的通信和协作。

一、Want 的定义和作用

Want 是一个对象,用于在应用组件之间传递信息。它可以携带各种信息,例如目标组件的名称、参数、数据等,从而实现应用组件之间的通信和协作。
以下是一个 Want 对象的示例

图片 1.png

开发者可以根据应用需求使用不同的 Want 参数属性,实现应用组件之间的信息传递和通信

二、显式 Want 与隐式 Want 的区别

显式 Want 和 隐式 Want 是两种不同的 Want 对象,它们的主要区别在于目标组件的指定方式。

· 显式 Want:在启动组件时,显式 Want 对象会指定目标组件的名称和包名,例如 wantInfo = { deviceId: '', bundleName: 'com.example.myapplication', abilityName: 'FuncAbility' }。

· 隐式 Want:在启动组件时,隐式 Want 对象不会指定目标组件的名称,而是通过 action、entities、uri、type 等信息进行匹配,例如 wantInfo = { action: 'ohos.want.action.search', entities: ['entity.system.browsable'], uri: 'www.test.com:8080/query/stude…', type: 'text/plain' }。
显式 Want 和隐式 Want 的选择取决于应用的需求。如果知道目标组件的名称和包名,则使用显式 Want;如果目标组件不明确,则需要使用隐式 Want。

三、显式 Want 的匹配规则

显式 Want 的匹配规则是根据 Want 对象中的信息与目标组件的配置进行匹配,只有匹配成功的组件才会被启动。
以下是一个显式 Want 匹配的示例

图片 2.png

显式 Want 的匹配规则

1. bundleName 匹配:首先匹配 Want 对象中的 bundleName 与目标组件配置中的 bundleName 是否一致。

2. abilityName 匹配:如果 bundleName 匹配成功,则匹配 Want 对象中的 abilityName 与目标组件配置中的 abilityName 是否一致。

3. parameters 匹配:如果 abilityName 匹配成功,则匹配 Want 对象中的 parameters 与目标组件配置中的 parameters 是否一致。
只有当所有匹配规则都满足时,显式 Want 才会匹配成功,并启动目标组件

四、隐式 Want 的匹配规则

隐式 Want 的匹配规则是通过 action、entities、uri、type 等信息进行匹配,匹配成功的组件数量决定了隐式 Want 的处理方式。
以下是一个隐式 Want 匹配的示例

图片 3.png

隐式 Want 的匹配规则

1. linkFeature 匹配:首先匹配 Want 对象中的 linkFeature 与目标组件配置中的 linkFeature 是否一致。

2. uri 和 type 匹配:如果 linkFeature 匹配成功,则匹配 Want 对象中的 uri 和 type 与目标组件配置中的 uris 数组中的 uri 和 type 是否一致。

3. action 和 entities 匹配:如果 uri 和 type 匹配成功,则匹配 Want 对象中的 action 和 entities 与目标组件配置中的 actions 和 entities 是否一致。
隐式 Want 的匹配结果有以下几种情况

· 匹配失败:如果所有匹配规则都失败,则隐式 Want 匹配失败,无法启动目标组件。

· 匹配成功,单个组件:如果匹配成功,并且只有一个目标组件满足条件,则直接启动该目标组件。

· 匹配成功,多个组件:如果匹配成功,并且有多个目标组件满足条件,则弹出选择框让用户选择要启动的组件。
隐式 Want 的匹配规则相对复杂,开发者需要根据应用的需求选择合适的匹配规则,并确保配置文件中的信息准确无误

五、Want 参数的属性说明

Want 对象包含多个属性,每个属性都用于传递不同的信息。以下是一些常用的 Want 参数属性:

· deviceId:目标设备的 ID,如果为空,则表示本设备。

· bundleName:目标组件的包名。

· moduleName:目标组件所在的模块名,如果为空,则表示默认模块。

· abilityName:目标组件的名称。

· uri:目标组件的 URI,用于匹配具有特定 URI 的组件。

· type:目标组件的 MIME 类型,用于匹配具有特定 MIME 类型的组件。

· action:目标组件的动作,用于匹配具有特定动作的组件。

· entities:目标组件的实体,用于匹配具有特定实体的组件。

· parameters:目标组件的参数,用于传递自定义信息。

咱们可以根据应用需求使用不同的 Want 参数属性,实现应用组件之间的信息传递和通信。
本篇博客介绍了华为鸿蒙 Want 的定义、作用、显式 Want 和隐式 Want 的区别、匹配规则以及 Want 参数的属性说明。后续文章将深入讲解 Want 对象的具体使用方法和开发技巧
请注意,由于鸿蒙系统版本更新较快,部分功能可能存在变动,请以最新版本官方文档为准。(文章转载自51CTO,作者SameX)