一碰即传,重构跨设备文件分享体验

用户在分享图片、文件或热点时,需经历复杂的操作流程(如打开应用、选择文件、搜索设备、确认传输等),步骤繁琐且耗时;或者需要用户打断当前操作(如暂停视频播放、退出游戏界面),导致体验不连贯。

HarmonyOS SDK 分享服务(Share Kit)推出了"碰一碰分享"能力,支持用户通过碰一碰发起跨端分享,可实现传输图片、共享WI-FI等。只需轻轻触碰两台设备,即可完成内容的传递。

功能场景

  • 宿主应用进入一个可以分享的界面,比如打开或者选中的一个文件、一条备忘录、一个联系人详情,或个人热点/WIFI等。

  • 宿主应用可以分享多个内容,如选中的多张图片等。

简单触碰:当您想要分享某些内容时,只需将两台设备在亮屏、解锁的状态下并且都已开启华为分享服务(系统默认开启),设备顶部轻碰即可触发。

即时反馈:一旦设备接触成功,"碰一碰分享"会立即给出反馈,告知用户分享是否已经开始以及进度情况,用户可以清楚地知道分享的状态,避免不确定性带来的困扰。

无缝切换:分享完成后,用户可以直接返回到之前的活动或者选择查看已发送/接收的内容。

除了便捷的操作流程外,"碰一碰分享"还支持多种类型的内容分享,涵盖了日常生活中大多需要共享的信息形式,比如文本材料、图片视频和音频文件等。

开发步骤

配置开发环境

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

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

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

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

开发流程

开发示例

以分享App Linking直达应用为例,展示如何通过碰一碰分享实现直达应用,应用需接入App Linking以确保端到端完整的体验。操作步骤请参考:使用App Linking实现应用间跳转。

  1. 导入相关模块

    import { uniformTypeDescriptor as utd } from '@kit.ArkData';
    import { systemShare, harmonyShare } from '@kit.ShareKit';
    import { fileUri } from '@kit.CoreFileKit';

  2. 定义碰一碰分享事件监听/取消监听方法(收到碰一碰分享事件回调后,需尽快调用sharableTarget.share()方法发起分享,超过3秒可能会失败)。

    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. 进入可分享页面时,注册碰一碰分享监听事件;离开可分享页面(包括应用退至后台等场景)时,取消碰一碰分享监听事件。

    // Entry Component 代码片段
    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();
    }

完整示例代码请参见:碰一碰分享示例代码。

了解更多详情>>

访问分享服务官网

获取碰一碰分享开发指导文档

相关推荐
woshihuanglaoshi9 小时前
鸿蒙技术进阶全景高级成长体系:从初中级到架构师的技能树/学习路径/项目实战/认证体系系统性方法论
学习·华为·harmonyos
轻口味10 小时前
端侧 AI 赋能鸿蒙版 Obsidian:轻规划基于 HarmonyOS 7.0 图像超分特性的体验突破与开发实战
人工智能·华为·harmonyos·鸿蒙
OH_TPC11 小时前
【鸿蒙优选三方库】@ohos/lottie:让 After Effects 动画在 HarmonyOS 上稳定播放
华为·harmonyos·鸿蒙
李蚊子13 小时前
鸿蒙应用开发实践与上架复盘
harmonyos
2501_9197490314 小时前
华为鸿蒙训练口才APP—小羊口才
华为·harmonyos·鸿蒙
大锅盖114 小时前
HarmonyOS 摄像头焦点管理的完整工程实现
华为·harmonyos
woshihuanglaoshi16 小时前
鸿蒙老旧项目升级改造高级:API废弃迁移/ArkTS语法升级/架构重构策略/增量迁移/风险管控方案
学习·华为·重构·架构·harmonyos·鸿蒙
星空真迷人1 天前
嵌入式鸿蒙并非精简版,核心究竟是什么?
stm32·单片机·嵌入式硬件·物联网·华为·harmonyos·iot
OH_TPC2 天前
【鸿蒙优选三方库】@ohos/ijkplayer:在鸿蒙上像 B 站一样流畅播视频
华为·音视频·harmonyos·鸿蒙
2501_919749032 天前
华为鸿蒙经期记录APP—小羊月经
华为·harmonyos·鸿蒙