Administrator
发布于 2026-09-03 / 7,886 阅读
0
0

鸿蒙百篇系列(82/100):智能穿戴深度开发——Wear Engine 与端云协同

系列:鸿蒙开发从入门到专家 · 第 82 篇

手表、手环这类穿戴设备屏幕小、电量有限、交互短促,开发逻辑和手机 App 差异很大。HarmonyOS NEXT 通过 Wear Engine 把手机和穿戴设备的能力打通,让穿戴端专注显示和采集,手机端负责计算和存储。本篇围绕 Wear Engine 的核心能力、传感器数据通信、以及低功耗设计展开。

一、穿戴应用的设计前提

在写第一行代码之前,先明确几个约束:

  • 屏幕尺寸:手表常见 1.5-2 英寸,信息密度要低,按钮要大。

  • 电池续航:持续传感器采集或频繁网络请求会快速耗电。

  • 交互时长:单次抬腕操作通常只有几秒,流程必须短。

  • 内存与存储:穿戴设备资源远小于手机,不能照搬手机架构。

基于这些约束,穿戴端通常只保留"显示 + 简单控制",复杂逻辑交给手机或云端。

能力

穿戴端

手机端

传感器数据采集

主力

辅助

复杂 UI 渲染

弱

强

网络请求

受限

主力

持久化存储

小容量

大容量

AI 推理

轻量模型

完整模型

二、Wear Engine 能做什么

Wear Engine 是 HarmonyOS NEXT 上连接手机与穿戴设备的核心 Kit,主要提供四类能力:

  1. 设备状态管理:查询已配对设备、电量、连接状态、佩戴状态等。

  2. 点对点通信:设备间发送消息和文件。

  3. 消息通知:手机应用向穿戴设备推送通知。

  4. 传感器访问:读取心率、ECG、PPG、加速度、陀螺仪等数据。

2.1 发现与连接设备

import { wearEngine } from '@kit.WearEngineKit';
import { common } from '@kit.AbilityKit';

let deviceClient = wearEngine.getDeviceClient(getContext() as common.UIAbilityContext);

async function findWatch() {
  const deviceList = await deviceClient.getConnectedDevices();
  const watch = deviceList.find(d => d.category === wearEngine.DeviceCategory.WATCH);
  if (!watch) {
    console.info('no connected watch');
    return;
  }
  console.info(`found watch: ${watch.name}, randomId: ${watch.randomId}`);
  return watch;
}

2.2 P2P 消息通信

const p2pClient = wearEngine.getP2pClient(getContext() as common.UIAbilityContext);

async function sendToWatch(watch: wearEngine.Device, payload: object) {
  const installed = await p2pClient.isRemoteAppInstalled(watch.randomId, 'com.example.watchapp');
  if (!installed) {
    console.info('watch app not installed');
    return;
  }

  const textEncoder = new util.TextEncoder();
  const message: wearEngine.P2pMessage = {
    content: textEncoder.encodeInto(JSON.stringify(payload))
  };
  await p2pClient.sendMessage(watch.randomId, { bundleName: 'com.example.watchapp' }, message);
}

// 接收消息
p2pClient.registerMessageReceiver(
  watch.randomId,
  { bundleName: 'com.example.watchapp' },
  (err, message) => {
    if (err) {
      console.error(`receive error: ${err.message}`);
      return;
    }
    const textDecoder = new util.TextDecoder();
    const text = textDecoder.decodeWithStream(message.content);
    console.info(`received: ${text}`);
  }
);

消息体大小和发送频率需要控制,建议单次不超过 4KB,高频数据走批量打包而不是逐条发送。

三、传感器数据的正确打开方式

Wear Engine 把人体传感器和运动传感器抽象成两类:

  • HEALTH_SENSOR:ECG、PPG、HR 等健康数据。

  • MOTION_SENSOR:ACC、GYRO、MAG 等运动数据。

读取心率数据示例:

const sensorClient = wearEngine.getSensorClient(getContext() as common.UIAbilityContext);

async function readHeartRate(watch: wearEngine.Device) {
  const sensors = await sensorClient.getHealthSensors(watch.randomId);
  const hrSensor = sensors.find(s => s.type === wearEngine.HealthSensorType.HEART_RATE);
  if (!hrSensor) {
    console.info('HR sensor not available');
    return;
  }

  sensorClient.onHealthSensorData(
    watch.randomId,
    hrSensor.sensorId,
    (data: wearEngine.HealthSensorData) => {
      console.info(`HR value: ${data.values[0]}`);
    }
  );
}

3.1 采集策略

  • 连续监测:运动、睡眠场景可开启连续采集,但要设置采样率,比如 1Hz 心率足够就不要上 10Hz。

  • 按需触发:健康检测类功能在用户主动发起时采集,完成后立即停止。

  • 批量上报:穿戴端缓存 1-5 分钟的数据后统一发送到手机,减少射频耗电。

四、低功耗与后台提醒

穿戴设备上常见的提醒场景是:手机 App 在后台,手表震动提示。HarmonyOS NEXT 提供系统级代理提醒(Agent Reminder),即使应用进程被回收,系统也能代发提醒。

import { reminderAgentManager } from '@kit.BackgroundTasksKit';

function createTimerReminder(seconds: number, title: string, content: string) {
  const reminder: reminderAgentManager.ReminderRequestTimer = {
    reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_TIMER,
    triggerTimeInSeconds: seconds,
    title,
    content,
    notificationId: Date.now()
  };
  reminderAgentManager.publishReminder(reminder)
    .then(id => console.info(`reminder id: ${id}`))
    .catch(err => console.error(`publish failed: ${err.message}`));
}

需要在 module.json5 中声明权限:

"requestPermissions": [
  { "name": "ohos.permission.KEEP_BACKGROUND_RUNNING" },
  { "name": "ohos.permission.PUBLISH_AGENT_REMINDER" }
]

五、UI 适配要点

手表屏幕以圆形和方形为主,ArkUI 提供了 watchShape 等能力判断屏幕形态。设计时建议:

  • 单屏只展示一个核心操作,避免多级菜单。

  • 文字不小于 14fp,按钮热区不小于 40vp。

  • 列表项使用 List + ListItem,支持滑动返回。

  • 深色模式在 OLED 表盘上更省电,建议默认深色。

六、实战:运动数据同步链路

以一个跑步应用为例,完整链路如下:

  1. 用户在手机端发起"开始跑步",通过 P2P 发送指令到手表。

  2. 手表端启动 GPS 和运动传感器采集,本地缓存每公里配速、心率区间。

  3. 跑步过程中,手表每 30 秒批量上报一次数据到手机。

  4. 手机端完成轨迹绘制、卡路里计算、历史记录写入。

  5. 运动结束,手机端生成报告,同时通过消息通知手表显示"运动完成"。

这个链路的关键是"谁计算、谁显示、谁存储"的边界要清晰。

七、小结

智能穿戴开发的核心不是把 App 缩小,而是重新分配任务:穿戴端做轻量采集和即时反馈,手机和云端做复杂处理。接入 Wear Engine 时要关注权限申请、消息大小、采样率和批量上报策略。只有把功耗和通信成本控制住,穿戴体验才能变得可用而不是累赘。

下一篇我们转向智慧屏,看看大屏 TV 上如何设计内容和交互。

参考阅读

  • 华为开发者联盟:Wear Engine 开发指南

  • 华为开发者联盟:Background Tasks Kit 开发指南

  • HarmonyOS 设计规范:穿戴设备 UX


评论