【OpenHarmony/HarmonyOs 】近场快传学习卡片设计:基于模型路由、收藏状态与权限最小化

本文基于我的 OpenHarmony/HarmonyOS 项目「物理视界 PhysicsVision」整理。当前项目已经有模型元数据、路由、收藏、最近浏览和学习进度。
这一篇不是说项目已经完成近场快传,而是基于现有结构设计“模型学习卡片如何通过近场快传分享”。对应主题:近场快传、全场景智慧生活、精细化权限管控。📤

一、为什么物理模型适合近场快传?

物理学习经常发生在多人场景:

  • 同桌互相推荐模型;
  • 老师课堂分发实验;
  • 学生把错题相关模型发给同学;
  • 家长让孩子打开某个复习内容;
  • 平板和手机之间续接学习。

如果每次都让用户手动搜索模型,成本比较高。
近场快传可以把“某个模型入口”直接发送给附近设备。

二、项目已有的模型路由

实验室页中已经维护了模型路由:

private routes: string[] = [
  'pages/SoundPropagation',
  'pages/LightReflection',
  'pages/SeriesParallelCircuit',
  'pages/UniformAcceleration',
  'pages/FreeFall',
  'pages/ForceComposition',
  'pages/ProjectileMotion'
]

每个模型还有名称、描述、分类、年级和难度:

private names: string[] = [
  '声音的传播', '光的反射', '串并联电路'
]

private categoryTags: string[] = [
  '波动', '光学', '电磁学'
]

private difficulties: string[] = [
  '基础', '基础', '基础'
]

这些数据已经足够生成一张“学习卡片”。

三、学习卡片可以包含什么?

一个模型分享卡片可以设计为:

interface PhysicsShareCard {
  modelIndex: number
  name: string
  desc: string
  category: string
  grade: string
  difficulty: string
  route: string
}

例如:

{
  "modelIndex": 11,
  "name": "光的干涉",
  "category": "光学",
  "grade": "高三",
  "difficulty": "挑战",
  "route": "pages/LightInterference"
}

接收端拿到 route 后就可以打开对应模型。

四、为什么只传模型索引和路由?

近场快传不一定要传复杂文件。
对于这个项目来说,模型内容已经内置在 App 中,所以分享时只需要传:

  • 模型索引;
  • 路由;
  • 标题;
  • 简短描述。

这样有几个好处:

  1. 数据很小;
  2. 传输快;
  3. 不涉及用户隐私;
  4. 不需要上传云端;
  5. 接收端打开稳定。

这也符合权限最小化原则。

五、分享入口放在哪里?

我认为可以放在三个位置:

1. 实验室模型卡片

每个模型卡片右侧增加分享按钮。
适合快速推荐。

2. 模型详情页顶部栏

当前顶部栏已有返回和收藏:

Text(this.isFav() ? '❤️' : '🤍')
  .fontSize(22)
  .onClick(() => { this.toggleFav() })

后续可以在收藏旁边增加分享:

← 光的干涉 🌈        ❤️  📤

3. 收藏页

用户收藏的通常是重点模型,从收藏页分享也很自然。

六、接收端如何处理?

接收端拿到卡片后,可以:

  1. 校验 modelIndex 是否在合法范围;
  2. 校验 route 是否存在;
  3. 记录访问;
  4. 跳转到模型详情页。

项目中已有访问记录方法:

recordVisit(idx: number): void {
  if (this.visitedModels.length === 0) {
    this.visitedModels = idx.toString()
    return
  }
  let parts = this.visitedModels.split(',')
  for (let i = 0; i < parts.length; i++) {
    if (parseInt(parts[i]) === idx) return
  }
  this.visitedModels = this.visitedModels + ',' + idx.toString()
}

接收分享后也可以调用类似逻辑,把模型加入最近浏览。

七、权限管控:用户主动分享时才触发

近场快传属于用户主动行为,不应该在 App 启动时申请相关权限或能力。

建议流程:

  1. 用户点击分享;
  2. 弹出分享确认;
  3. 说明将发送模型名称和入口;
  4. 用户确认后触发近场能力;
  5. 发送成功后提示。

这样用户知道自己发送了什么,也知道什么时候触发系统能力。

八、不应该分享哪些内容?

为了隐私保护,不建议默认分享:

  • 用户挑战成绩;
  • 最近浏览完整列表;
  • 个人学习画像;
  • 设备信息;
  • 用户身份;
  • 任何图片、音频或定位信息。

如果未来要分享成就卡片,也应该让用户明确选择。

九、和全场景智慧生活的关系

近场快传可以让学习在设备之间流动:

  • 手机上找到模型,发给平板大屏学习;
  • 老师设备发给学生设备;
  • 同学之间分享同一个实验;
  • 家庭场景中把复习模型发给孩子设备。

这就是全场景智慧学习:
内容不是被锁在某个设备里,而是跟着学习场景流转。

十、总结

「物理视界」当前还没有真正接入近场快传,但它已经具备做近场分享的基础:模型元数据、路由、收藏、最近浏览和详情页入口。
后续只要把模型封装成轻量学习卡片,就能实现低权限、低数据量、强场景感的分享体验。

这篇文章对应的主题是:近场快传 + 全场景智慧生活 + 精细化权限管控
它没有脱离当前项目,而是基于真实路由和模型结构做扩展设计。📤

img

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐