返回首页
一周热榜
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
})
})
```
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
}
}
```