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

鸿蒙Want:组件通信的「万能信使」指南[特殊字符] 组件通信效率 =(正确选择显式/隐式 × 参数精准度)÷ 匹配耗时明确目标 → 用显式Want(快准狠)模糊需求 → 用隐式Want(灵活匹配)跨设备场景 → 必传deviceId+检查权限。 阅读详情

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

HarmonyOS-应用组件之间信息传递的桥梁 Want是一个对象,用于在应用组件之间传递信息。它可以携带各种信息,例如目标组件的名称、参数、数据等,从而实现应用组件之间的通信和协作。以下是一个 Want 对象的示例deviceId: '', // 目标设备的 ID,如果为空,则表示本设备bundleName: 'com.example.myapplication', // 目标组件的包名moduleName: 'entry', // 目标组件所在的模块名,如果为空,则表示默认模块。 阅读详情

相关推荐

LabVIEW与MySQL实时数据存储:传感器采集与数据库同步实践

本文详细介绍了如何将LabVIEW与MySQL结合,实现传感器数据的实时采集与高效存储。通过设计合理的数据库表结构、配置LabVIEW数据库连接工具包,并编写核心的采集与存储VI,构建了稳定可靠的数据链路。文章重点分享了批量插入、连接管理、时间同步等关键优化技巧与避坑指南,帮助工程师应对工业监控、环境监测等场景下的实时数据同步挑战。

weixin_29281915的博客 261

uniapp使用want Weapp的组件调用Dialog后无法获取事件Component “pages/cate/cate“ does not have a method “onClose

它丫的找不到关闭事件,点击确定事件也找不到

qq_63270619的博客 768

西门子200 SMART与博图WinCC通讯全攻略:从PC Access到S7-200协议避坑指南

本文详细解析了西门子S7-200 SMART PLC与博途WinCC上位机通讯的两种主流方案:基于PC Access SMART的OPC通讯和利用博途内置S7-200协议驱动直连。文章深入对比了两种架构的优缺点、配置步骤,并提供了从网络层到软件层的深度排错指南与性能优化建议,帮助工程师高效、稳定地实现系统集成。

gg901的博客 809

项目开发流程

关于一个移动端app开发流程的一个简单分享 首先声明,这个项目是我个人独立开发并经过测试阶段最后正式上线的。 准备阶段 选定框架 我在开发这个项目的时候,首先要先确定要使用的框架类型,我选择了vue的最新的脚手架,因为vue就是专门为单页面应用开发而开发的一个模板,使用起来还是非常方便的。 环境配置 选定框架之后就要根据项目的需要去进行一些基本配置,我一般会先进行多环境变量的配置,因为一个项目会经历三个开发阶段,本地开发阶段、测试阶段、上线阶段,提前弄好多环境变量的配置就以便项目开发到后期不用去手动

weixin_47208955的博客 475

Lossless-Claw 插件实战:告别上下文截断,让 OpenClaw 永不遗忘

本文介绍了OpenClaw的Lossless-Claw插件,这是一个基于LCM论文的DAG摘要系统,能有效解决上下文截断问题。文章包含10个部分,从插件原理到实操指南: 核心原理:通过DAG结构持久化存储所有原始消息,将旧消息分块摘要并形成层级结构,保持上下文在模型Token限制内。 性能优势:在OOLONG基准测试中得分74.8,优于Claude Code的70.3,尤其在长上下文场景表现更佳。 功能特点: 提供lcm_grep、lcm_describe等工具主动回忆历史 摘要始终链接回原文,实现真正无损

u014798858的博客 2617

AXI Timer IP核使用说明

AXI Timer是提供定时技术功能的集成IP核,具有时间生成、事件捕获、产生PWM波以及产生中断的功能,下面具体讲述Timer IP核的使用说明。

weixin_43418104的博客 2487

【愚公系列】2023年12月 HarmonyOS教学课程 051-Stage模型(信息传递载体Want)

应用中的信息传递是为了实现各种功能和交互。信息传递可以帮助用户和应用之间进行有效的沟通和交流。通过信息传递,应用可以向用户传递重要的消息、通知和提示,以提供及时的反馈和指导。同时,用户也可以通过信息传递向应用发送指令、请求和反馈,以实现个性化的需求和操作。信息传递还可以帮助应用之间实现数据的共享和交互。通过信息传递,不同应用可以实现数据的互通,以实现更多的功能和服务。例如,一个购物应用可以通过信息传递与支付应用进行数据交互,以实现支付功能;

愚公智库 8万+

数据预处理

数据预处理 数据预处理(数据清洗)是数据挖掘过程中的重要一步,它主要包括数据清洗,数据集成,数据变换和数据规约。 在我们进行数据挖掘的过程中,大量的原始数据中存在着大量有问题的数据(脏数据)比如有缺失值的,不一致的,有异常的,大量重复的数据等。这些脏数据会严重影响到数据挖掘建模过程的执行效率,也可能会使挖掘结果产生偏差。通过数据预处理(数据清洗)可以提高数据的质量,更好的适应特定的挖掘技术及工具。...

CJW的博客 9929

HarmonyOS学习(二)——Want 概述

在Stage模型中,Want是对象间信息传递的载体,可以用在应用组件间的信息传递。相当于FA模型的Intent。作为startAbility的参数,包含指定的启动目标,以及启动时需要携带的相关数据(bundleName和AbilityName字段分别指明目标Ability所在应用的包名以及对应的Ability名称)。

qi85481455的博客 1049

安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案

本文主要介绍了安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案,希望能对使用Windows WSL的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

基于知识图谱的时空事件关联推理能力培养

随着信息技术的飞速发展,大量的时空事件数据被产生和收集,如交通流量数据、气象观测数据、社交媒体上的地理定位信息等。这些数据蕴含着丰富的知识和规律,但要从中提取有价值的信息并非易事。基于知识图谱的时空事件关联推理旨在通过构建知识图谱,将时空事件数据进行整合和关联,从而实现对事件之间潜在关系的挖掘和推理。本文的目的是系统地介绍基于知识图谱的时空事件关联推理能力的培养方法,包括核心概念、算法原理、数学模型、实际应用等方面。

操作系统内核探秘的博客 750

HarmonyOS 5 鸿蒙 Want 机制与组件间通信详解

本文系统介绍了鸿蒙Want通信机制的设计原理与开发实践。Want作为鸿蒙分布式系统的核心通信载体,通过统一接口解决了组件间跨进程、跨设备通信的难题。文章从设计目标、对象结构、类型分类三个维度深入解析Want机制,并对比了显式与隐式Want的适用场景。通过具体的代码示例,展示了应用内组件通信、跨应用数据共享等典型场景的实现方法,为开发者提供了Want机制的完整开发指南。

haolove527的专栏 4781

为YOLOv11引入加权双向特征金字塔(BiFPN)

本文介绍了将BiFPN应用于YOLOv11模型以提升边缘设备上小目标检测精度的实践。针对传统FPN在特征融合时的信息丢失问题,采用带可学习权重的BiFPN结构进行改造,实现了不同层级特征的动态融合。重点阐述了WeightedFeatureFusion模块的实现细节、neck结构改造方法及训练部署注意事项。实验表明,该改进使小目标AP提升3.1%,参数量仅增加5%,在精度和效率间取得良好平衡。文章还分享了权重初始化、归一化处理等实用技巧,并强调需根据数据特性评估改进效果,重新计算anchor等关键点。

as1225120794的博客 349

鸿蒙应用开发UI基础第六节:Want拉起应用跳转传参匹配规则实战

摘要 本文系统讲解了HarmonyOS中Want的核心概念与使用规范。Want是组件间交互的信息载体,分为显式Want(指定bundleName+abilityName)和隐式Want(通过action/entities等描述意图)。重点解析了隐式Want的匹配规则,包括最高优先级的linkFeature匹配、action匹配等层级校验机制,强调精准匹配原则。文章还详细说明了Want对象的关键字段含义及使用约束,为开发者实现跨组件通信提供了完整指导。

weixin_35045177的博客 795

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

CangjieCorpus鸿蒙仓颉开发进阶:UIAbility生命周期与ArkUI状态管理完全指南

CangjieCorpus 是仓颉(Cangjie)编程语言的官方知识语料库,整合了鸿蒙开发指南、AbilityKit 组件规范与 ArkUI 状态管理 API 文档,是学习 UIAbility 生命周期、@State 状态变量与 ArkUI 声明式 UI 开发的高质量 RAG 知识基座。本文面向新手,用通俗的方式带你搞懂应用组件的四大生命周期状态与常用状态装饰器的选型思路。 > 💡 本文所有

gitblog_00692的博客 149

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HarmonyOS 应用开发之显式Want与隐式Want匹配规则,2024年最新字节跳动面试题目

传入want参数的uri的最左边依次需要和scheme,或者scheme和host,或者scheme、host和port都匹配,才满足最左uri匹配。调用方传入的want参数中设置uri和type参数发起启动应用组件的请求,系统会遍历当前系统已安装的组件列表,并逐个匹配待匹配应用组件的skills配置中的uris数组,如果待匹配应用组件的skills配置中的uris数组中只要有一个可以匹配调用方传入的want参数中设置的uri和type即为匹配成功。want参数中uri和type的具体匹配规则。

2401_84182318的博客 1262

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HarmonyOS 应用开发之显式Want与隐式Want匹配规则

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

maniuT的博客 1968

want简单帮助

类似java中的ant,用于自动编译delphi程序,只需要写一个XML规范的配置文件。做的事情特别多,基本的编译功能,还能操作cvs,zip打包,发布,调用外部程序等。工程是开源的,每项任务都是一个Task,可以自己编写扩展,比如我就想要SVN的支持, 但是现在还没有时间写这个扩展:-(want带的文档太少了,readme就是说参考java ant,参考ant以及实际使用,总结了如 下一些。一些

capboy的专栏 2883

Vue--Vant组件

官网地址 适用于移动端 首先,通过 vue create xxx 创建 vue 项目 其次,对于 vant 的安装有如下几种方式: 一是通过, --本项目用的方式 # Vue 2 项目,安装 Vant 2: npm i vant -S # Vue 3 项目,安装 Vant 3: npm i vant@next -S 一是通过 优快云, <!-- 引入样式文件 --> <link rel="stylesheet" href="https://cdn.js

小白小白从不日别的博客 9803

vant组件库入门

vant组件库 1.vant组件库-介绍,安装 2.全部引入 3.手动按需引入 4.自动按需引入 5.弹出框使用 6.表单使用 1.vant组件库-介绍 Vant Weapp 是移动端 Vue 组件库Vant的小程序版本,两者基于相同的视觉规范,提供一致的 API 接口,助力开发者快速搭建小程序应用。 ...

weixin_57569609的博客 5133

vue 移动端ui框架组件展示

转发:https://www.cnblogs.com/maqingyuan/p/9737236.html#Demo%E7%A4%BA%E4%BE%8B

javaScript_want的博客 2030

详解Vant组件的使用

Vant是Vue的移动端UI框架,在众多框架中,官方文档写的最好的一个框架。 此文主要讲解关于组件使用的流程和一些组件的理解

Army-海军的博客 2万+

Vant组件库

Vant组件库问题汇总 1. 如何引用自定义图标 方法一: 打开iconfont图标库 把需要的图标加入购物车 添加至项目 下载到本地 把下载后的压缩包放到src/assets下 (为了好看重新命名iconfont) main.js中引入css文件 // vant import './plugin/vant.js' // 字体图标 import '@/assets/iconfont/iconfont.css' 代码 <template> <d

xiaoxian_xian的博客 2097

vant 组件库入门

简介 Vant是一套轻量、可靠的移动端Vue组件库,可以快速搭建出风格统一的页面,提升开发效率。 vant 官网 特点 60+ 高质量组件 95% 单元测试覆盖率 完善的中英文文档和示例 支持按需引入 支持主题定制 支持国际化 支持 TS 支持 SSR 建议搭配 webpack,babel 使用 Vant,这样可以使用 webpack 提供的丰富插件和个性化配置。Vant 支持了 babel-plugin-impo...

qq_52731473的博客 2498

Android开发四大组件

这个文章主要是讲Android开发的四大组件,本文主要分为 一、Activity详解 二、Service详解 三、Broadcast Receiver详解 四、Content Provider详解 外加一个重要组件 intent的详解。 文章有部分内容来自网络,本文是一个总结性文章。 一、Activity详解 Activty的生命周期的也就是它所在进程的生命周期。

hlf48641715的专栏 1584
上一篇: 华为鸿蒙嵌入式 UI 扩展组件:跨越界限的舞台
下一篇: 华为鸿蒙开发:掌握应用包名、图标、版本及权限配置
SameX-4869
博客等级 码龄17年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值