开发语言:ArkTs
开发工具:DevEco Studio 5.0.0 Release
API 版本:API 12使用框架:Share Kit
华为分享新推出碰一碰分享,支持用户通过碰一碰发起跨端分享,可实现传输图片、共享 wifi 等。
一、前期准备
1. 依赖条件
碰一碰分享实现直达应用,应用需接入App Linking以确保端到端完整的体验。参考:鸿蒙原生实现应用间跳转之App Linking。
2. 环境要求
3. 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();}
复制代码
结尾
如大家发现文章描述有问题或有更好的方案,还请评论回复,一起探讨学习,感谢!
评论