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

走向菜鸟的菜鸟
发布于 2025-3-13 10:32
浏览
0收藏

开发语言:ArkTs
开发工具:DevEco Studio 5.0.0 Release
API版本:API 12
使用框架:Share Kit

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

【HarmonyOS】鸿蒙原生分享之“碰一碰”分享(APP内实现)-鸿蒙开发者社区

一、前期准备

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')) {
  // 支持一碰分享的能力.
}
  • 1.
  • 2.
  • 3.

当进入可分享页面时,使用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);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.

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();
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

结尾

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

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
收藏
回复
举报
1
1条回复
按时间正序
/
按时间倒序
鸿蒙开发者社区官方账号
鸿蒙开发者社区官方账号

抓住新人

回复
2025-3-13 16:33:24
回复
    相关推荐