写点什么

【HarmonyOS】鸿蒙原生分享之“碰一碰”分享(APP 内实现)

  • 2025-03-21
    安徽
  • 本文字数:1583 字

    阅读完需:约 5 分钟

开发语言:ArkTs


开发工具:DevEco Studio 5.0.0 Release


API 版本:API 12使用框架:Share Kit


华为分享新推出碰一碰分享,支持用户通过碰一碰发起跨端分享,可实现传输图片、共享 wifi 等。


一、前期准备

1. 依赖条件

碰一碰分享实现直达应用,应用需接入App Linking以确保端到端完整的体验。参考:鸿蒙原生实现应用间跳转之App Linking

2. 环境要求

  • 支持的设备类型:当前仅支持手机碰手机。

  • 支持的手机系统:双端需HarmonyOS NEXT 5.0.0.102 SP6及以上版本,可使用canIUse进行判断。

  • 集成开发环境:DevEco Studio NEXT Beta1及以上版本。

3. Share Kit 的处理机制:

  • 任意一端设备不支持碰一碰能力时,轻碰无任何响应。

  • 宿主应用无法获得分享结果,Share Kit会通过系统通知消息告知用户对端接收或拒绝。

4. 触发条件

手机应用发起碰一碰分享时,双端设备需要在亮屏、解锁的状态下并且都已开启华为分享服务(系统默认开启),设备顶部轻碰即可触发。如果用户已手动关闭华为分享服务开关,轻碰事件触发时,用户会接收到系统通知提示开启。

二、开始接入

1. 判断设备是否支持

if (canIUse('SystemCapability.Collaboration.HarmonyShare')) {  // 支持一碰分享的能力.}
复制代码


当进入可分享页面时,使用 harmonyShare.on()方法注册碰一碰监听事件,当离开可分享页面(包括应用退至后台等场景)时,使用 harmonyShare.off()方法取消碰一碰监听事件。

2. 监听碰一碰事件

使用harmonyShare.on()harmonyShare.off()实现注册取消碰一碰的监听事件。


import { uniformTypeDescriptor as utd } from '@kit.ArkData';import { systemShare, harmonyShare } from '@kit.ShareKit';import { fileUri } from '@kit.CoreFileKit';
/** * 监听回调函数 * @param sharableTarget 分享 */private immersiveCallback(sharableTarget: harmonyShare.SharableTarget) { const contextFaker: Context = getContext(this); let filePath = contextFaker.filesDir + '/exampleKnock1.jpg'; let shareData: systemShare.SharedData = new systemShare.SharedData({ utd: utd.UniformDataType.HYPERLINK, content: 'https://sharekitdemo.drcn.agconnect.link/ZB3p', // 根据title,description,thumbnailUri会生成不同的卡片模板,具体可参考配套卡片模板章节。 thumbnailUri: fileUri.getUriFromPath(filePath), title: '碰一碰分享卡片标题', description: '碰一碰分享卡片描述' }); sharableTarget.share(shareData);}
/** * 开始监听 */private immersiveListening() { harmonyShare.on('knockShare', this.immersiveCallback);}
/** * 关闭监听 */private immersiveDisablingListening() { harmonyShare.off('knockShare', this.immersiveCallback);}
复制代码

3. 添加和移除监听

进入可分享页面时,注册碰一碰分享监听事件;当离开可分享页面时,取消碰一碰分享监听事件。


离开可分享页面,包括应用退至后台等场景。


// 页面消失时onPageHide(): void {  // 发送通知  let context = getContext(this);  context.eventHub.emit('onBackGround');}
// 页面出现aboutToAppear(): void { // 添加碰一碰监听 this.immersiveListening(); // 添加监听退到后台 let context = getContext(this); context.eventHub.on('onBackGround', this.onBackGround);}
// 页面消失aboutToDisappear(): void { // 移除碰一碰监听 this.immersiveDisablingListening(); // 添加监听退到后台 let context = getContext(this); context.eventHub.on('onBackGround', this.onBackGround);}
// 推到后台时,执行方法private onBackGround() { // 移除碰一碰监听 this.immersiveDisablingListening();}
复制代码

结尾

如大家发现文章描述有问题或有更好的方案,还请评论回复,一起探讨学习,感谢!

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2025-03-18 加入

还未添加个人简介

评论

发布
暂无评论
【HarmonyOS】鸿蒙原生分享之“碰一碰”分享(APP内实现)_鸿蒙_走向菜鸟的菜鸟_InfoQ写作社区