【HarmonyOS】【进阶】鸿蒙原生分享之“碰一碰”分享(APP内实现) 原创
走向菜鸟的菜鸟
发布于 2025-3-13 10:32
浏览
0收藏
开发语言: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();
}
结尾
如大家发现文章描述有问题或有更好的方案,还请评论回复,一起探讨学习,感谢!
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2025-3-25 17:38:26修改
赞
收藏
回复
相关推荐
抓住新人