手表端计分系列封面

系列第 7 篇。手表不是手机页面缩小版。它最适合承载比赛现场的高频动作:A 队 +1、B 队 +1、撤销、暂停播报、结束比赛。

当前 App 首页截图

一、真实问题背景

羽毛球比赛中最频繁的动作不是编辑队员,也不是看统计,而是加分。计分员如果一直低头点手机,会错过球路,也会影响比赛节奏。手表端的价值在于:抬腕即可操作,动作少,反馈快。

但手表端也有明显限制:屏幕小、误触概率高、输入能力弱、长列表体验差。所以它不应该复制 features/src/main/ets/scoring/LiveScoringPage.ets 的完整页面,而应该抽出最小计分动作。

二、目标与边界

手表端第一版建议只做四类动作:

1. A 队 +1。2. B 队 +1。3. 撤销上一步。4. 结束当前小局。

边界是:不在手表端创建对局,不编辑队员,不做复杂费用计算,不展示完整技术统计。手表端只处理比赛中“低打扰”的计分输入,手机端仍是主控。

三、当前计分模型的可复用点

手机端实时计分页已经有清晰的动作模型。页面里有 ScoreMatchplayerA.scoreplayerB.score、撤销和结束逻辑,播报也通过 ScoreSpeechService 封装。

increaseScore(matchId: string, team: 'A' | 'B'): void {
  const match = this.findMatch(matchId);
  if (match === undefined || match.status === 'finished') {
    return;
  }
  this.pushHistory(match);
  if (team === 'A') {
    match.playerA.score += 1;
  } else {
    match.playerB.score += 1;
  }
  this.speakText(this.scoreAnnouncement(match));
}

后续要做手表端时,不应该重新写一套得分规则,而是把这类动作下沉成服务层接口。

四、建议新增 ScoreActionService

为了让手机页和手表端共用逻辑,可以新增 common/src/main/ets/service/ScoreActionService.ets。它只暴露动作,不暴露 UI。

export type ScoreAction = 'teamAPlus' | 'teamBPlus' | 'undo' | 'finish';

export class ScoreActionService {
  static apply(sessionId: string, matchId: string, action: ScoreAction): boolean {
    const detail = SessionStore.getDetail(sessionId);
    // 读取比赛、校验状态、修改比分、写回 SessionStore
    return true;
  }
}

这样 LiveScoringPage.ets 继续负责大屏 UI,手表端只负责触发动作。动作成功后再由手机端或平板端刷新状态。

五、手表端交互应该更保守

手表端必须减少误触。推荐交互是:

主屏:A 队大按钮 / B 队大按钮
次级:撤销 / 结束
长按:确认结束比赛
振动:加分成功反馈

加分是单击,结束是长按,这样可以降低误结束。撤销只撤一步,不做复杂历史列表。比分显示要足够大,文字信息要少。

六、数据同步的最低要求

手表端计分必须保证两个原则:

1. 手表离线或断开时,手机端不能丢失主状态。2. 手表动作重复到达时,不能连续加两次同一分。

可以给每次动作增加 actionId

watchActionId = watchDeviceId + timestamp + sequence

手机端处理后记录最近动作 ID,重复动作直接忽略。这个策略比单纯靠按钮防抖更可靠。

七、和语音播报的关系

手机端已经有 common/src/main/ets/service/ScoreSpeechService.ets,手表端不一定负责播报。更合理的方式是:手表提交加分动作,手机端更新比分并调用 ScoreSpeechService.speak()。这样语音包、音量、失败降级仍由手机端管理。

if (ScoreActionService.apply(sessionId, matchId, 'teamAPlus')) {
  ScoreSpeechService.speak('当前比分 8 比 6');
}

八、官方参考

手表端能力应以 HarmonyOS 多设备和应用开发官方文档为准。本文重点是工程拆分和计分动作设计,不把设备通信细节写死在页面里。

华为开发者文档:HarmonyOS 应用开发

九、工程验收清单

- features/src/main/ets/scoring/LiveScoringPage.ets 中计分动作可被抽为服务。- common/src/main/ets/storage/SessionStore.ets 能按 sessionId 保存对局详情。- common/src/main/ets/service/ScoreSpeechService.ets 不依赖具体页面,可由动作服务触发。- common/src/main/ets/model/Match.ets 的比分字段足够承载手表端动作。- 验证时间:2026-06-29;当前工程目标包含 HarmonyOS 6.0/API 20+,昨日 Hvigor 构建已验证 BUILD SUCCESSFUL

十、小结

手表端计分的关键不是把手机页缩小,而是抽出最小动作协议。当前工程已经有计分页面、对局存储和语音播报基础,下一步适合先落 ScoreActionService,再让手表端成为一个轻输入设备。

十一、下一篇衔接

有了手表端输入后,平板端就更适合作为展示端。下一篇继续讲手机和平板如何分工:手机控制,平板看板。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐