开发语言: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();
}
复制代码
结尾
如大家发现文章描述有问题或有更好的方案,还请评论回复,一起探讨学习,感谢!
评论