【OpenHarmony/HarmonyOs 】从数学学习 App 出发:近场快传、实况窗与全场景智慧学习设计
【OpenHarmony/HarmonyOs 】从数学学习 App 出发:近场快传、实况窗与全场景智慧学习设计
项目类型:OpenHarmony / HarmonyOS ArkTS 数学学习应用
文章主题:近场快传、实况窗、全场景智慧生活
说明:本文基于“数学视界”现有项目能力,讨论如何把学习应用扩展到 HarmonyOS 全场景体验中 📚
一、为什么数学应用也适合做全场景?
很多人一提到“全场景智慧生活”,第一反应是智能家居、车机、手表、音箱。但学习类应用同样非常适合全场景:
- 手机上做题,平板上看解析;
- 课堂上把曲线方案快速分享给同学;
- 倒计时挑战可以在状态栏持续提醒;
- 收藏的公式、错题、图形模型可以在不同设备之间流转;
- 家长或老师可以通过轻量入口查看学习进度。
我的项目“数学视界”本身已经具备一些全场景扩展基础:
deviceTypes支持phone和tablet;- 题库、收藏、成就、学习统计都集中在
AppState; - 画板支持将曲线模型序列化为 JSON;
- 挑战答题有计时器和实时进度;
- 项目配置了
BackupExtensionAbility,具备备份恢复扩展点。
这意味着项目虽然目前还是一个本地数学学习应用,但结构上已经可以继续扩展到“多设备协同学习”。
二、当前项目的全场景基础
在entry/src/main/module.json5中,项目声明了手机和平板:
"deviceTypes": ["phone","tablet"]这一步很基础,但很重要。数学学习应用在平板上天然有优势:屏幕更大,公式、图形、题目解析都能展示得更完整。
项目还配置了备份扩展能力:
"extensionAbilities": [ {"name":"EntryBackupAbility","srcEntry":"./ets/entrybackupability/EntryBackupAbility.ets","type":"backup","exported":false,"metadata": [ {"name":"ohos.extension.backup","resource":"$profile:backup_config"} ] } ]对应的backup_config.json:
{"allowToBackupRestore":true}这说明学习数据、收藏数据、成就数据未来可以纳入系统备份恢复方案。对于学习类应用来说,这一点很关键,因为用户最在意的是:我收藏的公式、画过的图、刷过的题,换设备后还能不能回来。
三、近场快传:把曲线方案变成可分享的学习资料
数学视界里最适合做近场分享的是“曲线画板”。在画板页中,用户可以创建圆、双曲线、椭圆、抛物线、函数图像,并把当前方案保存到收藏。
现有代码里已经有一段很适合作为分享数据源:
saveToFavorites(): void {constgraphData: string = JSON.stringify({ models:this.modelList, functions:this.functionGraphs, range:this.graphRange, name:this.boardName }) AppState.addFavorite({ id:'', type:'graph', title:this.boardName, content:'曲线模型 x'+this.modelList.length +' | 函数 x'+this.functionGraphs.length, category:'图形', icon:'🎨', tags: ['图形探究'], createdAt:0, updatedAt:0, graphData: graphData, }) }这里的graphData本质上就是一份轻量学习资产:
models:圆、双曲线、椭圆等参数模型;functions:函数表达式;range:坐标范围;name:画板名称。
如果要接入近场快传,推荐不要直接传整页状态,而是定义一个清晰的数据包:
interface ShareGraphPackage { type:'math_graph'version:numbertitle:stringmodels:MathModel[]functions:FuncGraph[]range:DrawGraphRangecreatedAt:number}这样做的好处是:
- ✅ 数据结构稳定,后续升级可以通过
version兼容; - ✅ 只分享学习资料,不分享用户隐私数据;
- ✅ 接收方可以直接打开画板复现图形;
- ✅ 适合课堂、讨论、小组作业等场景。
实际接入近场能力时,可以根据目标 SDK 和服务类型选择系统分享、近场传输或业务侧二维码等方案。数学类内容建议优先分享结构化 JSON,而不是截图,因为结构化数据可以继续编辑。
四、实况窗:把挑战倒计时放到系统级提醒中
数学视界的挑战答题页已经有倒计时逻辑:
if(cfg.timeLimit !== undefined && cfg.timeLimit >0) {this.questionTimer = cfg.timeLimitthis.questionTimerHandler = setInterval(() => {if(!this.isPaused &&this.questionTimer >0) {this.questionTimer--if(this.questionTimer ===0) {this.autoSubmit() } } },1000) }在普通应用内部,这个倒计时只显示在答题页。但如果结合实况窗思路,就可以把它扩展为系统级的“正在进行任务”:
- 状态栏胶囊显示:第 3 / 10 题,剩余 12 秒;
- 锁屏卡片显示:数学挑战进行中,当前正确率 80%;
- 通知中心卡片显示:继续答题、暂停挑战、结束挑战;
- 答题结束后自动关闭实况窗,并展示得分。
一个业务层的状态模型可以这样设计:
interfaceChallengeLiveState {sessionId:stringcurrentIndex:numbertotalCount:numberremainingSeconds:numbercorrectCount:numberstatus:'running'|'paused'|'finished'}然后在答题页的计时器里同步状态:
privatebuildLiveState(): ChallengeLiveState {return{ sessionId:this.questionStartTime.toString(), currentIndex:this.currentIndex +1, totalCount:this.questions.length, remainingSeconds:this.questionTimer, correctCount:this.calculateCorrect(), status:this.isPaused ?'paused':'running', } }注意,实况窗不是普通通知,它更适合“正在发生、持续变化、有明确结束”的任务。数学挑战正好符合这三个条件:
- ⏱ 有倒计时;
- 📈 有进度;
- 🎯 有完成结果。
五、全场景智慧学习:不是多端复制,而是任务流转
全场景不等于把手机页面拉伸到平板,也不等于每个设备都做一遍完整功能。更好的思路是“不同设备承担不同学习任务”。
我给数学视界设计的全场景任务分工如下:
| 场景 | 适合能力 | 体验目标 |
|---|---|---|
| 手机 | 快速刷题、收藏公式、查看进度 | 随时学一点 |
| 平板 | 曲线画板、公式推导、错题复盘 | 大屏深度学习 |
| 状态栏/实况窗 | 挑战倒计时、目标提醒 | 不打断但持续提醒 |
| 近场分享 | 曲线方案、错题包、公式卡片 | 课堂协作 |
| 备份恢复 | 学习统计、收藏、成就 | 换机不丢数据 |
这个设计的核心是:围绕“学习任务”做流转,而不是围绕“页面”做复制。
六、AppState:全场景扩展的关键中枢
数学视界中大量学习数据都集中在AppState.ets:
studyData:StudyData = {totalStudyDays:0,currentStreak:0,totalDrawings:0,totalCalculations:0,totalFunctions:0,totalFormulasViewed:0,totalUnitsConverted:0,lastStudyDate:'',dailyGoal:5,todayCount:0,consecutiveGoalMetDays:0,funFactsViewed:0,}挑战统计也集中管理:
challengeStats:ChallengeStats={totalChallenges:0,totalQuestions:0,totalCorrect:0,totalTimeSpent:0,averageScore:0,bestScore:0,currentStreak:0,longestStreak:0,masteredGrades:[],masteredKnowledge:[],recentResults:[],categoryStats:{},}这种单例状态管理虽然简单,但对当前项目很实用:UI 页面不需要各自维护一套统计逻辑,后续要做备份、同步、分享、导出时,也能从一个地方整理数据。
如果后续继续增强,我会把AppState拆成三层:
LearningRepository:负责学习数据持久化;ChallengeRepository:负责挑战结果和错题;SharePackageBuilder:负责构造分享数据包。
这样近场快传、实况窗、备份恢复都不会直接依赖 UI 页面。
七、备份恢复:学习应用的“安全感”
项目里的EntryBackupAbility当前是基础实现:
exportdefaultclassEntryBackupAbilityextendsBackupExtensionAbility{asynconBackup() { hilog.info(DOMAIN,'testTag','onBackup ok')awaitPromise.resolve() }asynconRestore(bundleVersion: BundleVersion) { hilog.info(DOMAIN,'testTag','onRestore ok %{public}s',JSON.stringify(bundleVersion))awaitPromise.resolve() } }后续可以把以下数据纳入备份:
- 收藏的公式与知识点;
- 曲线画板的
graphData; - 挑战答题结果;
- 学习目标设置;
- 成就解锁进度。
学习应用的粘性不只来自功能丰富,也来自“我的努力不会丢”。备份恢复正是这种安全感的一部分。
八、实现建议:先做结构化,再接系统能力
如果想把数学视界继续扩展成全场景学习应用,我建议按这个顺序来:
- 先把收藏、题目、画板、挑战结果都整理成可序列化数据;
- 再做导出/导入,确保跨设备数据能被正确恢复;
- 接入近场分享,把曲线方案、错题包、公式卡片变成可传输对象;
- 接入实况窗,把挑战倒计时、每日目标提醒变成系统级持续任务;
- 最后做多设备体验优化,比如平板大屏画板、手机快速答题。
这样做的好处是:底层数据稳定,系统能力只是更换不同的“出口”。
九、总结
围绕“近场快传、实况窗、全场景智慧生活”这个主题,数学视界可以形成一条很自然的演进路线:
- 📦 通过结构化
graphData分享曲线方案; - ⏱ 通过挑战倒计时扩展实况窗提醒;
- 📱 通过
phone + tablet适配覆盖不同学习设备; - ☁️ 通过备份恢复保护学习资产;
- 🧠 通过统一
AppState组织学习数据和统计结果。
全场景体验的重点不是炫技,而是让用户在不同设备、不同时间、不同学习状态下,都能自然接上自己的学习任务。对数学视界来说,这正是下一步可以继续打磨的方向。🚀
参考资料:
- OpenHarmony 文档总览
- OpenHarmony 项目介绍
- HarmonyOS 游戏近场快传能力参考