鸿蒙OS 5-新闻应用-碰一碰分享
1 分•作者: zhousg•7 个月前
HarmonyOS 5 新闻应用 - 碰一碰分享功能实现案例
摘要
本文详细介绍了在 HarmonyOS 5.0 新闻应用中实现碰一碰分享功能的过程。通过使用 KnockManager 类来管理碰一碰分享事件,实现了新闻内容的分享。<p>export class KnockManager {
private static instance: KnockManager
private ctx?: common.UIAbilityContext
private isBind: boolean = false
private news?: NewsModel<p><pre><code> static getInstance(ctx: common.UIAbilityContext, news: NewsModel) {
if (!KnockManager.instance) {
KnockManager.instance = new KnockManager(ctx, news)
}
return KnockManager.instance
}
constructor(ctx: common.UIAbilityContext, news: NewsModel) {
this.ctx = ctx
}
// 处理碰一碰逻辑
knockCallback(target: harmonyShare.SharableTarget) {
if (this.news && this.ctx) {
// 演示封面是媒体资源,写入沙盒
const media = this.ctx.resourceManager.getMediaContentSync(this.news.cover as Resource)
const filePath = this.ctx.filesDir + '/share_' + Date.now() + '.png'
const file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
fileIo.writeSync(file.fd, media.buffer)
const uri = fileUri.getUriFromPath(filePath)
// 创建分享数据
const sharaData: systemShare.SharedData = new systemShare.SharedData({
utd: uniformTypeDescriptor.UniformDataType.HYPERLINK,
content: ' `https://edition.cnn.com/2025/06/20/sport/lionel-messi-club-world-cup-inter-miami-spt` ',
thumbnailUri: uri,
title: this.news.title,
description: this.news.company,
})
// 碰一碰分享
target.share(sharaData)
}
}
bindEvent() {
if (!this.isBind) {
harmonyShare.on('knockShare', (target) => {
this.knockCallback(target)
})
this.isBind = true
}
}
unBindEvent() {
harmonyShare.off('knockShare')
this.isBind = false
}
}</code></pre>
查看原文
HarmonyOS 5 News Application - Knock Sharing Function Implementation Case
Summary
This article details the implementation of the knock sharing function in a HarmonyOS 5.0 news application. The KnockManager class is used to manage knock sharing events and achieve the sharing of news content.<p>export class KnockManager {
private static instance: KnockManager
private ctx?: common.UIAbilityContext
private isBind: boolean = false
private news?: NewsModel<p><pre><code> static getInstance(ctx: common.UIAbilityContext, news: NewsModel) {
if (!KnockManager.instance) {
KnockManager.instance = new KnockManager(ctx, news)
}
return KnockManager.instance
}
constructor(ctx: common.UIAbilityContext, news: NewsModel) {
this.ctx = ctx
}
// handle knock logic
knockCallback(target: harmonyShare.SharableTarget) {
if (this.news && this.ctx) {
// demo cover is media resoure, write in sandbox
const media = this.ctx.resourceManager.getMediaContentSync(this.news.cover as Resource)
const filePath = this.ctx.filesDir + '/share_' + Date.now() + '.png'
const file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
fileIo.writeSync(file.fd, media.buffer)
const uri = fileUri.getUriFromPath(filePath)
// create share data
const sharaData: systemShare.SharedData = new systemShare.SharedData({
utd: uniformTypeDescriptor.UniformDataType.HYPERLINK,
content: ' `https://edition.cnn.com/2025/06/20/sport/lionel-messi-club-world-cup-inter-miami-spt` ',
thumbnailUri: uri,
title: this.news.title,
description: this.news.company,
})
// knock share
target.share(sharaData)
}
}
bindEvent() {
if (!this.isBind) {
harmonyShare.on('knockShare', (target) => {
this.knockCallback(target)
})
this.isBind = true
}
}
unBindEvent() {
harmonyShare.off('knockShare')
this.isBind = false
}
}</code></pre>