首页/新闻资讯/正文详情

《HarmonyOS 7 精准碰一碰跨设备协作开发实战》05:从文件投递到跨设备业务指令协同【鸿蒙心迹】

发布时间:2026/9/27 3:39:05 来源:云帆数科 栏目:资讯中心
《HarmonyOS 7 精准碰一碰跨设备协作开发实战》05:从文件投递到跨设备业务指令协同【鸿蒙心迹】
前面都是传文件这次升级一下手机碰PC左边是加素材碰中间是插画布碰右边是换预览。同一个资源不同位置不同动作。前四篇我们解决了传什么、传到哪、怎么传不乱。这一篇解决一个更有意思的问题传过去以后干什么我之前测的时候手机上一张图碰PC左边素材栏图片加进去了碰中间画布图片也加进去了碰右边预览窗口图片还是加进去了。不对啊——这三个地方应该有不同动作才对。碰左边应该是添加到素材库。碰中间应该是插入到当前画布。碰右边应该是替换预览内容。但我之前的代码不管碰哪里都是同一个处理存URI、加列表。问题出在哪我只传了文件没传业务指令。一、传输层和业务层要分开很多人做跨设备分享容易犯一个错把传文件和怎么处理文件写在一个回调里。接收回调一进来立刻if/else判断是哪个区域然后直接调对应的业务方法。短代码看着挺爽但业务一多就炸了。比如现在有3个区域对应3个动作。以后加了一个碰图层面板要插入到指定图层你又得在回调里加一个if。再加一个碰导出按钮要导出当前资源再加一个if。回调变成了if/else大杂烩谁都不敢动。正确的做法是分两层传输层只负责把数据传过来不关心怎么处理。业务层收到数据后根据指令分发到不同处理器。中间用一个统一的Payload把业务信息封装起来。二、CrossDevicePayload统一传输协议我们定义一个统一的数据结构CrossDevicePayload。它不只装URI还要装resourceId资源唯一标识action要执行什么动作target目标区域sourceDevice来源设备timestamp时间戳params业务参数这样接收端收到后根据action字段分发到不同的业务处理器。这段代码解决什么问题统一跨设备传输协议。文件protocol/CrossDevicePayload.ets用途封装传输数据和业务指令接入位置发送端组装、接收端解析enumCrossAction{ADD_TO_MATERIALadd_material,// 添加到素材库INSERT_CANVASinsert_canvas,// 插入画布REPLACE_PREVIEWreplace_preview,// 替换预览EXPORT_RESOURCEexport_resource// 导出资源}interfaceCrossDevicePayload{resourceId:string;uri:string;action:CrossAction;target:string;sourceDevice:string;timestamp:number;params:Recordstring,string;}// 发送端组装functionbuildPayload(action:CrossAction,uri:string,target:string):CrossDevicePayload{return{resourceId:Date.now().toString(),uri:uri,action:action,target:target,sourceDevice:phone_deviceInfo.getDeviceId(),timestamp:Date.now(),params:{}};}三、业务分发器不要在回调里写if/else有了Payload接收端就不需要在回调里写一堆if了。我们做一个BusinessDispatcher——业务分发器。它维护一个映射表action对应哪个处理器。接收回调只做一件事解析Payload然后调dispatcher.dispatch(payload)。具体怎么处理dispatcher自己找对应的处理器。这段代码解决什么问题业务指令分发。文件dispatcher/BusinessDispatcher.ets用途根据action分发到不同处理器接入位置接收数据后调用classBusinessDispatcher{privatehandlers:MapCrossAction,(payload:CrossDevicePayload)voidnewMap();// 注册处理器register(action:CrossAction,handler:(payload:CrossDevicePayload)void){this.handlers.set(action,handler);}// 分发dispatch(payload:CrossDevicePayload){lethandlerthis.handlers.get(payload.action);if(handler){console.info(执行动作payload.action);handler(payload);}else{console.warn(未知动作payload.action);}}}// 使用letdispatchernewBusinessDispatcher();dispatcher.register(CrossAction.ADD_TO_MATERIAL,(payload){materialService.addResource(payload.uri);});dispatcher.register(CrossAction.INSERT_CANVAS,(payload){canvasService.insertImage(payload.uri,payload.params.x,payload.params.y);});dispatcher.register(CrossAction.REPLACE_PREVIEW,(payload){previewService.setSource(payload.uri);});四、为什么要这么分你可能会问我直接在回调里写if/else不也能跑吗能跑但有三个问题第一个问题耦合。传输逻辑和业务逻辑绑死了。你以后换个传输方式比如从碰一碰换成WiFi直连还得把业务代码抄一遍。第二个问题扩展。加新动作就得改接收回调。回调越改越大最后变成几千行的大函数。第三个问题测试。业务处理器是独立函数可以单独测试。混在回调里你得模拟整个传输流程才能测业务逻辑。分开以后传输层只管传数据业务层只管处理数据各干各的。第五篇总结跨设备分享协议和业务协议应该解耦。传输层只负责把数据传过来业务层根据action字段分发到不同处理器。不要把所有if/else堆在接收回调里那样业务一多就乱套了。工程上最容易翻车的是把传文件和怎么处理文件混在一起。分开以后加新动作只需要注册一个新处理器不用动传输逻辑。下一篇升级到多设备并发一台手机同时发给多台设备怎么保证互不影响。

相关推荐

消费品跨部门数据治理:支撑规模化决策的运营机制建设
消费品跨部门数据治理:支撑规模化决策的运营机制建设

导语 国内大型消费品企业进入规模扩张阶段后,普遍需要将数据治理从单部门试点扩展到跨部门协同,支撑企业规模化决策。但不少企业在推广过程中,会遇到指标口径跨部门不一致、权限边界不清、治理成果无法对齐决策需求等问题,最终导致… · 2026/9/27 3:39:05

朱雀仿宋字符集全景解析:1.4万枚字形如何覆盖CJK、希腊多音符号与IPA
朱雀仿宋字符集全景解析:1.4万枚字形如何覆盖CJK、希腊多音符号与IPA

朱雀仿宋字符集全景解析:1.4万枚字形如何覆盖CJK、希腊多音符号与IPA 【免费下载链接】朱雀仿宋 开源仿宋字库计划 项目地址: https://gitcode.com/TrionesType/zhuque 「朱雀仿宋」是璇玑造字发起的开源仿宋字库计划,以 SIL OFL 1.1 协议发布&am… · 2026/9/27 3:38:59

Java学习五 面向对象高级1 继承5-Java中的权限修饰符
Java学习五 面向对象高级1 继承5-Java中的权限修饰符

1.例子1:用private例子2:用public · 2026/9/27 3:38:59

网站代建设费用吗?5年实战避坑指南与源码解析
网站代建设费用吗?5年实战避坑指南与源码解析

网站代建设费用吗?5年实战避坑指南与源码解析 别再被那些花里胡哨的模板网站忽悠了。很多老板花了几千块,拿回来一个套壳站,打开慢、样式丑,改个颜色还得求供应商,这钱花得冤不冤?我干了十年建站,见过太多这种“电子废品”。今天这篇 避坑指南… · 2026/9/27 4:16:42

位移传感器没信号?先别拆,万用表五步定位法
位移传感器没信号?先别拆,万用表五步定位法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 4:16:36

嵌入式硬件调试五法:串口打印、逻辑分析仪、JTAG/SWD等实战决策指南
嵌入式硬件调试五法:串口打印、逻辑分析仪、JTAG/SWD等实战决策指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 4:16:36

SpringBoot+微信小程序图书管理系统实战:登录、借阅与部署全解析
SpringBoot+微信小程序图书管理系统实战:登录、借阅与部署全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 4:16:36

Docker多阶段构建实战:让Nginx镜像从400MB瘦身到200MB,体积砍半!
Docker多阶段构建实战:让Nginx镜像从400MB瘦身到200MB,体积砍半!

一、实验背景 在上一节实验中,我们基于 CentOS 7 构建了 YUM 版 Nginx 镜像,但镜像体积高达 400MB。这是因为 CentOS 7 基础镜像本身就包含大量系统工具和库,而容器运行 Nginx 实际上并不需要完整的操作系统环境。 多阶段构建(Mul… · 2026/9/27 4:16:30

搞懂怎么给网站做超链接,源码下载避坑指南
搞懂怎么给网站做超链接,源码下载避坑指南

搞懂怎么给网站做超链接,源码下载避坑指南 备案流程一头雾水?很多新手刚拿到服务器,盯着后台那些ICP备案号、域名解析记录,脑子直接宕机。别慌,先别管备案那些繁琐的表格和审核周期,咱们先把手头最基础的活干完。如果你是从 源码下载… · 2026/9/27 4:16:30

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码