HarmonyOS 5鸿蒙场景技术共建能力:Day Matters快速实现隐私协议对话框
一、前言与背景:
大家好,我是完美句号!欢迎来到 HarmonyOS 5 开发实战系列。本系列致力于为开发者提供实用的技术方案和即拿即用的代码示例,帮助大家快速掌握 HarmonyOS Next 应用开发中的核心功能。在HarmonyOS 5鸿蒙系统中,基于Days Matter是鸿蒙系统上的原生应用,由坚果派团队开发,提供“历史上的今天”信息查询服务。用户可通过该应用查看当前日期或指定日期在全球范围内发生的重大事件、文化节日等信息。
二、Day Matters介绍:
Day Matters APP是一款融合了历史知识与互动体验的应用程序。它汇集了从古至今的丰富历史资料,它不仅能够帮助用户增长见识,更能激发用户对历史的兴趣与探索热情,使用户能够轻松W顾往昔,探索历史上的重要瞬间。无论是中华大地上的朝代更迭、文化瑰宝,还是全球范围内的重大战役、科技创新,这款应用都能为用户展现一幅清晰且生动的历史画卷。此外,它还能根据用户的兴趣偏好,智能推送相关的历史内容,为用户提供个性化的学习体验。
2.1 核心功能:
- 历史事件查询:展示同一天发生的全球重要事件,涵盖政治、科技、文化等领域,例如2024年3月27日的记录包含历史事件、文化节日等详细信息。
- 页面预览功能:无需下载即可查看事件详情,支持直接添加到手机桌面快捷访问。
- 教育价值:通过图文并茂的展示方式,帮助用户增长历史知识,提升文化素养。
Day Matters的主要功能如下:
- (1)显示当天日期历史上的新闻。
- (2)根据选择的日期显示相关的历史新闻。
- (3)通过搜索关键字显示历史新闻。
- (4)单击列表项跳转到新闻详情页面。
- (5)提供2X2与4X4卡片界面布局。
2.2 开发背景:
该应用基于鸿蒙元服务开发,采用分布式技术架构,适配多种终端形态。其开发目的是打破传统信息类应用的同质化问题,通过历史事件回溯增强用户黏性。
2.3 使用开源三方库@nutpi/privacy_dialog实现隐私协议对话框:
@nutpi/privacy_dialog是一个隐私协议对话框,使用Static Library静态共享库模块可以实现隐私协议对话框和隐私协议显示,对话框使用自定义的对话框实现,隐私协议显示在一个Webview组件页面上,支持本地HTML文件和HTTP或HTTPS 返回 HTML文件。
@nutpi/privacy_dialog的安装的命令如下:
@nutpi/privacy_dialog 通过ohpm执行对应的指令,可以将privacy_dialog安装到项目中。
ohpm install @nutpi/privacy_dialog

@nutpi/privacy_dialog的卸载:
通过 ohpm 执行卸载指令,可以将privacy_dialog从项目中删除,其程序包和配置信息将会从项目中移除。具体的命令如下。
ohpm uninstall @nutpi/privacy_dialog
@nutpi/privacy_dialog 的使用:
在EntryAbility.ts文件中创建首选项数据库,示例代码如下:

在Index.ets页面,调用对话框的show方法,示例代码如下:
import { CustomDialogPrivacy,PreferencesUtil,RouterParams } from '@nutpi/privacy_dialog'
let preferencesUtil = new PreferencesUtil();
import('@nutpi/privacy_dialog/src/main/ets/components/PrivacyPage'); // 引入静态共享包中的命名路由页面
// 开始显示隐私协议对话框
/**
* 如果localHtml参数为true,urlPage参数为空,显示默认隐私协议
* 如果localHtml参数为true,urlPage参数不为空,显示urlPage参数本地html文件
* 如果localHtml参数为false,urlPage参数为空,显示默认隐私协议
* 如果localHtml参数为false,urlPage参数不为空,显示urlPage参数http或https返回html文件
*/
// PrivacyPage为三方库里的routeName
// RouterParams参数1为localHtml=true时,使用本地rawfile目录下html文件,为false时,使用远程http隐私协议
// RouterParams参数2根据参数1而定,为true时,写本地html文件名如:privacy.html,为false时
openPrivacyPage() {
try {
router.pushNamedRoute({
name: 'PrivacyPage',
params: new RouterParams(true, 'privacy.html')
}).then(() => {
console.info("xx push page success");
}).catch((err: BusinessError) => {
console.error(`xx pushUrl failed, code: ${err.code}, msg: ${err.message}`);
})
} catch (err) {
let message = (err as BusinessError).message
let code = (err as BusinessError).code
console.error(`xx pushNamedRoute failed, code is ${code}, message is ${message}`);
}
}
onConfirm() {
// 此处可以写点击同意后跳转到主界面或其它逻辑
}
privacyDialogController: CustomDialogController = new CustomDialogController({
builder: CustomDialogPrivacy({
openPrivacy: this.openPrivacyPage,
onConfirm: this.onConfirm
}),
autoCancel: false,
alignment: DialogAlignment.Center,
customStyle: true
})
onPageShow() {
console.info('xx onPageShow 显示隐私协议')
preferencesUtil.getChangePrivacy().then((value) => {
console.info(`xx onPageShow 获取隐私协议状态:${value}`)
if (!value) {
this.privacyDialogController.open()
}
})
}
onPageHide() {
console.info(`xx Index -> onPageHide Close Start`)
this.privacyDialogController.close()
console.info(`xx Index -> onPageHide Close End`)
}
aboutToDisappear() {
console.info(`xx Index -> aboutToDisappear`)
this.privacyDialogController.close()
}
// 结束显示隐私协议对话框

更多推荐


所有评论(0)