首页 > 其他分享 >华为鸿蒙 Want:应用组件之间信息传递的桥梁

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

时间:2024-10-21 13:32:33浏览次数:1  
标签:匹配 鸿蒙 目标 华为 Want 显式 组件 隐式

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

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

一、Want 的定义和作用

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

let want: Want = {
  deviceId: '', // 目标设备的 ID,如果为空,则表示本设备
  bundleName: 'com.example.myapplication', // 目标组件的包名
  moduleName: 'entry', // 目标组件所在的模块名,如果为空,则表示默认模块
  abilityName: 'FuncAbility', // 目标组件的名称
  uri: 'https://www.test.com:8080/query/student', // 目标组件的 URI
  type: 'text/plain', // 目标组件的 MIME 类型
  action: 'ohos.want.action.search', // 目标组件的动作
  entities: ['entity.system.browsable'], // 目标组件的实体
  parameters: {
    // 目标组件的参数
    info: '这是一些自定义信息',
  },
};

开发者可以根据应用需求使用不同的 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: 'https://www.test.com:8080/query/student', type: 'text/plain' }
    显式 Want 和隐式 Want 的选择取决于应用的需求。如果知道目标组件的名称和包名,则使用显式 Want;如果目标组件不明确,则需要使用隐式 Want。

三、显式 Want 的匹配规则

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

import { common, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
let wantInfo: Want = {
  deviceId: '', // 目标设备的 ID,如果为空,则表示本设备
  bundleName: 'com.example.myapplication', // 目标组件的包名
  moduleName: 'entry', // 目标组件所在的模块名,如果为空,则表示默认模块
  abilityName: 'FuncAbility', // 目标组件的名称
};
// 启动目标组件
common.startAbility(wantInfo).then(() => {
  hilog.info(0x0000, 'testTag', 'Succeeded in starting ability.');
}).catch((err: BusinessError) => {
  hilog.error(0x0000, 'testTag', `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
});

显式 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 匹配的示例

import { common, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
let wantInfo: Want = {
  action: 'ohos.want.action.search', // 目标组件的动作
  entities: ['entity.system.browsable'], // 目标组件的实体
  uri: 'https://www.test.com:8080/query/student', // 目标组件的 URI
  type: 'text/plain', // 目标组件的 MIME 类型
};
// 启动目标组件
common.startAbility(wantInfo).then(() => {
  hilog.info(0x0000, 'testTag', 'Succeeded in starting ability.');
}).catch((err: BusinessError) => {
  hilog.error(0x0000, 'testTag', `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
});

隐式 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 对象的具体使用方法和开发技巧
请注意,由于鸿蒙系统版本更新较快,部分功能可能存在变动,请以最新版本官方文档为准

标签:匹配,鸿蒙,目标,华为,Want,显式,组件,隐式
From: https://www.cnblogs.com/samex/p/18489315

相关文章

  • 华为鸿蒙嵌入式 UI 扩展组件:跨越界限的舞台
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙系统的舞台上,UIAbility组件......
  • 华为鸿蒙 AbilityStage 组件容器:Stage模型的舞台中心
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。华为鸿蒙系统的阶段模型为开发者提供了......
  • 内置免费图标!SymbolGlyphs|鸿蒙动效开发笔记 04|Extras
    这篇笔记将介绍HarmonyOSNEXT应用开发里非常好用的官方内置图标库和原生图标组件。妙用这套组合拳可以解决几乎一切UI设计资源上的问题,并且将开发的App与原生鸿蒙风格完美契合!补充资料:官方图标库网站:HarmonyOSSymbol主题图标库(不全)https://developer.huawei.co......
  • 鸿蒙开发 四十九 数组
    1、数组的创建方式数组:接口范型的形式提供,接口的源码是:interfaceArray<T>,实际开发中数组用得非常多,创建数组的方式有:1、语法格式:let数组名:Array<数组类型>=[],实例:letarr1:Array<IObject>=[],这里申明IObject的数组,2,new关键字创建数组,语法格式:let数组名字:Arra......
  • 华为OD机试真题---勾股数元组
    华为OD机试中的“勾股数元组”题目是一道考察编程能力、算法基础和数学知识的题目。以下是对该题目的详细解析:一、题目描述如果三个正整数(a,b,c)满足a²+b²=c²的关系,则称(a,b,c)为勾股数。为了探索勾股数的规律,题目要求找到给定范围[N,M]内所有的勾股数元组,其中勾......
  • 鸿蒙ArkWeb 组件多媒体探究:从视频到音频
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言ArkWeb是华为鸿蒙系统提供的一......
  • 华为鸿蒙 Web 组件:高效调试策略
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言调试是软件开发过程中不可或缺的......
  • 2024年华为OD机试真题-勾股数元组-Java-OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。题目描述:如果3个正整数(a,b,c)......
  • 华为云计算学习笔记——FusionAccess发放链接克隆云桌面等
    发放链接克隆云桌面制作链接克隆模板安装win10-专业版,启用administrator,关闭防火墙,安装tools(自动通过dhcp获取ip地址),封装模板(链接克隆)为什么链接克隆这里要加域:你可以勾选跳过,后面发放的时候,会执行加域的动作,但是这样就会增加发放云桌面的时间(比如你发放了10台,会占用发放的时间),为了......
  • 整合华为云OBS上传工具类
    项目启动的要加上配置文件的扫描路径importcom.example.config.ObsProperties;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.sp......