ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【共创稿事节】HarmonyOS 7 精准碰一碰实战:识别触碰坐标,素材精准插入指定位置

【共创稿事节】HarmonyOS 7 精准碰一碰实战:识别触碰坐标,素材精准插入指定位置 本文基于 HarmonyOS 7API 26官方论坛解读与开发指导整理。文中代码是为说明问题自写的完整示例sharableTarget.getInfo()、receivableTarget.getInfo()等接口名引自官方论坛解读坐标字段等未逐字核实的写法已注明以官方文档为准涉及真机表现的部分以真机实测为准未做任何实测数据编造。引子碰一碰的最后一公里是碰哪传哪第一期V哥写碰一碰隔空传送时落点是传过去——手机碰一下电脑文件飞过去接收方再自己决定放哪。好用但差一口气用户心里想的是把这张图放到文档里光标那儿系统做的是把图传到这台设备。最后一公里的放到哪还得用户手动拖。HarmonyOS 7API 26把这最后一公里补上了碰一碰·精准分享手机轻触 PC/2in1 或平板屏幕时系统自动识别触碰点的屏幕坐标接收侧根据碰到了哪里决定插入位置——碰到文档编辑区就插图到光标附近碰到列表某一条就追加到那条碰到画布就落到画布坐标点官方论坛解读。这期V哥把它拆开讲精准分享与普通碰一碰的差别、双端新增的两个触点 API、发送端与接收端各自的实战逻辑最后给工程落地建议。一、定位从被发送到被投递普通碰一碰回答的问题是传给谁精准分享回答的是传到哪。官方的表述很清楚手机与 PC/2in1、手机与平板触发轻碰事件时接收设备侧可从回调事件中获取轻碰的位置——基于屏幕左上角为初始点的坐标信息据此执行不同的业务逻辑。这意味着分享的粒度从设备细化到了窗口里的位置。内容不再是被发送而是被精准投递文档编辑器碰一下插图到光标处、白板工具碰一下素材落到触点坐标、看板应用碰一下卡片追加到指定列。一条硬边界先记住API 26 版本及以上的电脑设备才支持精准碰一碰。老设备上碰一碰还是普通分享你的代码要做降级不能假设坐标一定拿得到。二、双端各新增一个触点 API相比 HarmonyOS 6API 26 新增了两个触点监听接口发送端和接收端各一个端接口干什么发送端sharableTarget.getInfo()未手动选择文件时获取触碰点位置按位置匹配要分享的内容接收端receivableTarget.getInfo()获取触碰点位置决定指定位置插入还是列表末尾追加两个接口的分工体现了精准分享的设计思想发送端按位置选内容接收端按位置定落点。碰到相册的某张图就传那张图碰到文档的某个区域就插到那个区域。两端都对坐标分享才是碰哪传哪。三、发送端实战按触点匹配内容匹配不上就终止发送端的典型链路用户没手动选文件直接拿手机碰目标屏幕。系统回调触发后sharableTarget.getInfo()拿到触碰点位置应用按位置匹配图片——匹配不到就直接终止分享流程而不是随便传一张。// 发送端按触点位置匹配要分享的图片// 接口名 sharableTarget.getInfo() 引自官方论坛解读// 返回结构以官方开发指导为准import{shareKit}fromkit.ShareKit;// 示意导入以官方文档为准onKnockEvent(sharableTarget:knockShare.SharableTarget):void{// V哥注未手动选择文件时才走按触点匹配的逻辑constinfosharableTarget.getInfo();constimgthis.matchImageByPosition(info);if(!img){// 匹配不到就终止别把不相干的内容推过去this.abortShare(触点位置没有匹配到图片);return;}this.startShare(img);}这个匹配不上就终止的官方建议很关键精准分享的价值在准宁可让用户重碰一次也别把错误位置的内容塞过去——用户对传错位置的容忍度远低于再碰一次。四、接收端实战拿到坐标决定插入还是追加接收端的链路轻碰回调里用receivableTarget.getInfo()拿触碰点位置坐标基于屏幕左上角。应用把屏幕坐标映射到自己窗口内的业务坐标再二选一指定位置插入编辑器光标处、画布触点或列表末尾追加落在列表容器时。// 接收端按触点位置决定插入策略onKnockReceive(receivableTarget:knockShare.ReceivableTarget):void{constinforeceivableTarget.getInfo();// 坐标基于屏幕左上角screenX/screenY 字段名以官方文档为准constxinfo.coordinate?.screenX;constyinfo.coordinate?.screenY;// 屏幕坐标 → 窗口内业务坐标的映射由应用完成constlocalthis.mapToContentArea(x,y);if(this.isInsideEditor(local)){this.insertImageAtCursor(local);// 指定位置插入}elseif(this.isInsideList(local)){this.appendToListEnd(local);// 列表末尾追加}}映射这一步是接收端的工作量所在屏幕坐标到窗口、窗口到内容区考虑滚动偏移V哥建议把映射函数单独封装横竖屏、窗口缩放、折叠展开各自处理别把坐标换算散落在业务代码里。五、工程建议两个官方 FAQ 级的坑坑 1云预览图超时。官方常见问题第一条应用用云端图片做预览图时回调触发时可能来不及下载导致超时失败。官方给的方案是预览图延迟更新——回调触发时先只发核心数据建立连接卡片展示先用 Share Kit 提供的默认预览图云端图下载完成后再更新。坑 2把精准当默认。坐标只有 API 26 的电脑设备以及配套的手机与平板组合才给得出来。V哥的降级策略拿不到坐标就退回普通碰一碰的传过去功能可用性优先精准只是增强。// module.json5 侧的权限与声明以官方开发指导为准 // 碰一碰分享的详细配置见官方指南此处不臆造字段适配场景上官方点名的方向值得对照自查办公协同文档插图、创意设计画布投放、教育课堂课件素材、游戏互动、智慧出行。工具类、编辑器类、白板类应用这个能力的集成性价比最高。参考与出处本文涉及的机制、接口与交互规则来自以下官方材料均为V哥动笔前逐条核验的原文出处HarmonyOS 7API 26碰一碰能力增强解读精准分享「碰哪传哪」官方论坛手机与PC/2in1、手机与平板间相互分享含获取轻碰坐标开发指南碰一碰文件分享最佳实践HarmonyOS 新能力一览7 / API 26最后一句跨设备分享的上半场比的是传得快下半场比的是传得准——一次轻碰带回一组坐标内容就有了落点发过去了和放到这儿了之间隔着的就是这一代系统能力的差距。
返回列表