尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
《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堆在接收回调里那样业务一多就乱套了。工程上最容易翻车的是把传文件和怎么处理文件混在一起。分开以后加新动作只需要注册一个新处理器不用动传输逻辑。下一篇升级到多设备并发一台手机同时发给多台设备怎么保证互不影响。
RELATED

相关推荐

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

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

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

📅 2026/9/27 3:39:14
抖哔高清下载器 v2.0.0 上手实录:抖音 / B站无水印视频批量下载,音频封面一键打包

抖哔高清下载器 v2.0.0 上手实录:抖音 / B站无水印视频批量下载,音频封面一键打包

刷到一条干货视频想存下来慢慢看,平台却不给下载按钮;好不容易保存下来,右下角一枚大水印直接把画面毁掉;想批量存一个系列教程,一条条操作到崩溃——这三个坑我踩了个遍。 最近在用的 抖哔 ,把这件事压缩…

📅 2026/9/27 3:39:14
选对模型才出活:Kimodo五大SOMA/G1/SMPL-X模型变体选型终极指南

选对模型才出活:Kimodo五大SOMA/G1/SMPL-X模型变体选型终极指南

选对模型才出活:Kimodo五大SOMA/G1/SMPL-X模型变体选型终极指南 【免费下载链接】kimodo Official implementation of Kimodo, a kinematic motion diffusion model for high-quality human(oid) motion generation. 项目地址: https://gitcode.com/gh_mirrors/ki…

📅 2026/9/27 3:39:14
MORE NEWS

更多资讯

📰

5个关键特性深度解析:mobile-mcp如何实现跨平台移动自动化测试

5个关键特性深度解析:mobile-mcp如何实现跨平台移动自动化测试 【免费下载链接】mobile-mcp Model Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators and Real Devices) 项目地址: https://gitcode.com/GitHub_…

📰

图片裁剪框为什么会越界?四个方向的边界计算方法

在维护我自己的图片处理项目图片猫(PicCat)时,我重新检查了快速编辑器的裁剪逻辑。一个容易混淆的现象是:裁剪框已经被限制在图片内,拖到边缘时却仍会“滑走”。原因可能不是少写了一个判断,而是把移动整个…

📰

NVIDIA Agent Skills 一条命令装进 Codex、Cursor、Kiro 的完整安装教程

NVIDIA Agent Skills 一条命令装进 Codex、Cursor、Kiro 的完整安装教程 【免费下载链接】skills Agent Skills for NVIDIA products — install into Claude Code, Codex, and other coding agents to run Physical AI, robotics, simulation, CUDA, and RAG workflows end to…

📰

NeriPlayer音质调校指南:均衡器、响度均衡与淡入淡出10个实用设置技巧

NeriPlayer音质调校指南:均衡器、响度均衡与淡入淡出10个实用设置技巧 【免费下载链接】NeriPlayer A native Android audio player that combines multi-source streaming, local control, rich lyrics, and self-hosted sync. / ✨ 一个把多源在线播放、本地管理、…

📰

Windows RDP 远程桌面:系统级原生协议的技术优势与局限

RDP(Remote Desktop Protocol,远程桌面协议)是微软开发的专有网络通信协议,从 Windows NT 时代起就深度集成在 Windows 系统中,默认使用 TCP 3389 端口。 与其他远程软件相比,RDP 在 Windows 环境下拥有独特…

📰

RSUITE DOMHelper 使用指南:React 项目中的 DOM 操作助手 API 全解析

前端UI组件 【免费下载链接】rsuite 🧱 A suite of React components . 项目地址: https://gitcode.com/gh_mirrors/rs/rsuite 点击查看 免费下载 在 React 项目中,官方并不推荐直接操作 DOM,而是主张通过状态与虚拟 DOM 驱动界…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬