首页
社区
课程
招聘
[原创]五指一抓一放,即可实现探屏“取”物、隔空传送
发表于: 5天前 1064

[原创]五指一抓一放,即可实现探屏“取”物、隔空传送

5天前
1064

跨端分享是应用常备的基础能力,从有线USB到无线WIFI传输,跨端传输能力在不断发展,然而,传统传输场景受到配对条件、网络速度、文件大小等因素影响,已经无法满足用户在工作、游戏以及生活等场景中的高频传输需求。

为此,HarmonyOS SDK 分享服务(Share Kit)新推出了隔空传送分享功能,支持用户使用“一抓一放”的简单手势,通过精准的界面反馈,给予用户强使用感知,并引导用户的每一步操作,从而实现人机交互形式的近距离快速跨端传输。

隔空传送照片使用场景

通过该能力,跨端传输方式实现了无需配对、无需网络的端到端无感传输,即使在弱网环境仍可稳定传输,让跨设备文件流转从“能用”变成“好用”。

隔空传送流程图

那么,隔空传送能力要如何实现呢?

一、在设备侧打开开关。

首先,使用隔空传送功能前,我们需要在设备侧打开“隔空传送”开关,开启路径为:设置 > 系统 > 快捷启动和手势 > 隔空传送。

二、分享App Linking直达应用

若要实现通过隔空传送分享实现直达应用,应用需要先接入App Linking,使用App Linking实现应用间跳转,以确保端到端完整的体验。

然后,我们导入相关模块。

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

同时定义隔空传送分享事件监听/取消监听方法,需要注意的是,收到隔空传送分享事件回调后,建议3秒内调用sharableTarget.share()方法发起分享,否则可能导致超时失败。

private immersiveCallback = (sharableTarget: harmonyShare.SharableTarget) => {
  let uiContext: UIContext = this.getUIContext();
  let contextFaker: Context = uiContext.getHostContext() as Context;
  let filePath = contextFaker.filesDir + '/exampleKnock1.jpg'; // 仅为示例 请替换正确的文件路径
  let shareData: systemShare.SharedData = new systemShare.SharedData({
    utd: utd.UniformDataType.HYPERLINK,
    content: '6c3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6K9r3q4J5k6h3E0A6N6r3c8W2L8h3!0Q4x3X3g2V1M7X3y4F1i4K6u0W2j5h3N6U0L8$3&6F1k6h3y4@1i4K6u0W2L8r3W2F1K9#2)9J5c8W2A6n7x3%4m8Q4x3U0M7`.,
    thumbnailUri: fileUri.getUriFromPath(filePath),
    title: '隔空传送分享卡片标题',
    description: '隔空传送分享卡片描述'
  });
  sharableTarget.share(shareData);
}

private immersiveListening() {
  harmonyShare.on('gesturesShare', this.immersiveCallback);
}

private immersiveDisablingListening() {
  harmonyShare.off('gesturesShare', this.immersiveCallback);
}

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

// Entry Component 代码片段
onPageHide(): void {
  let uiContext: UIContext = this.getUIContext();
  let context: Context = uiContext.getHostContext() as Context;
  context.eventHub.emit('onBackGround');
}
aboutToAppear(): void {
  this.immersiveListening();
  let uiContext: UIContext = this.getUIContext();
  let context: Context = uiContext.getHostContext() as Context;
  context.eventHub.on('onBackGround', this.onBackGround);
}

aboutToDisappear(): void {
  this.immersiveDisablingListening();
  let uiContext: UIContext = this.getUIContext();
  let context: Context = uiContext.getHostContext() as Context;
  context.eventHub.off('onBackGround', this.onBackGround);
}

private onBackGround = () => {
  this.immersiveDisablingListening();
}

随着跨端协同技术的持续演进,传统的文件传输工具可依靠隔空传送能力,进化为全场景服务流转基础设施,期待更多开发者加入共建。

了解更多详情>>

访问分享服务联盟官网

获取隔空传送开发指导文档


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 421
活跃值: (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很有内涵,能联系我吗137334010(企鹅
5天前
0
雪    币: 421
活跃值: (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大神,有问题请教,请联系19153616868
3天前
0
游客
登录 | 注册 方可回帖
返回