返回首页

一周热榜

1作者: zhousg4 天前原帖
HarmonyOS 5 新闻应用 - 系统分享功能实现案例 摘要 本文详细介绍了在 HarmonyOS 5.0 新闻应用中实现系统分享功能的过程。通过使用 BarButton 组件和 systemShare 模块,实现了新闻链接的分享功能。 ```javascript BarButton({ icon: $r('sys.media.ohos_ic_public_share') }) .onClick(() => { // 系统分享 const data = new systemShare.SharedData({ utd: uniformTypeDescriptor.UniformDataType.HYPERLINK, title: 'NewsAPP', content: ' `https://edition.cnn.com/` ' }) const controller = new systemShare.ShareController(data) const ctx = this.getUIContext().getHostContext() as common.UIAbilityContext controller.show(ctx, { previewMode: systemShare.SharePreviewMode.DETAIL, selectionMode: systemShare.SelectionMode.SINGLE }) }) ```
1作者: zhousg4 天前原帖
HarmonyOS 5 新闻应用 - 敲击分享功能实现案例 摘要 本文详细介绍了在 HarmonyOS 5.0 新闻应用中实现敲击分享功能的过程。使用 KnockManager 类来管理敲击分享事件,从而实现新闻内容的分享。 ```typescript export class KnockManager { private static instance: KnockManager private ctx?: common.UIAbilityContext private isBind: boolean = false private news?: NewsModel 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 shareData: 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(shareData) } } bindEvent() { if (!this.isBind) { harmonyShare.on('knockShare', (target) => { this.knockCallback(target) }) this.isBind = true } } unBindEvent() { harmonyShare.off('knockShare') this.isBind = false } } ```