系列:鸿蒙开发从入门到专家 · 第 82 篇
手表、手环这类穿戴设备屏幕小、电量有限、交互短促,开发逻辑和手机 App 差异很大。HarmonyOS NEXT 通过 Wear Engine 把手机和穿戴设备的能力打通,让穿戴端专注显示和采集,手机端负责计算和存储。本篇围绕 Wear Engine 的核心能力、传感器数据通信、以及低功耗设计展开。
一、穿戴应用的设计前提
在写第一行代码之前,先明确几个约束:
屏幕尺寸:手表常见 1.5-2 英寸,信息密度要低,按钮要大。
电池续航:持续传感器采集或频繁网络请求会快速耗电。
交互时长:单次抬腕操作通常只有几秒,流程必须短。
内存与存储:穿戴设备资源远小于手机,不能照搬手机架构。
基于这些约束,穿戴端通常只保留"显示 + 简单控制",复杂逻辑交给手机或云端。
二、Wear Engine 能做什么
Wear Engine 是 HarmonyOS NEXT 上连接手机与穿戴设备的核心 Kit,主要提供四类能力:
设备状态管理:查询已配对设备、电量、连接状态、佩戴状态等。
点对点通信:设备间发送消息和文件。
消息通知:手机应用向穿戴设备推送通知。
传感器访问:读取心率、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 表盘上更省电,建议默认深色。
六、实战:运动数据同步链路
以一个跑步应用为例,完整链路如下:
用户在手机端发起"开始跑步",通过 P2P 发送指令到手表。
手表端启动 GPS 和运动传感器采集,本地缓存每公里配速、心率区间。
跑步过程中,手表每 30 秒批量上报一次数据到手机。
手机端完成轨迹绘制、卡路里计算、历史记录写入。
运动结束,手机端生成报告,同时通过消息通知手表显示"运动完成"。
这个链路的关键是"谁计算、谁显示、谁存储"的边界要清晰。
七、小结
智能穿戴开发的核心不是把 App 缩小,而是重新分配任务:穿戴端做轻量采集和即时反馈,手机和云端做复杂处理。接入 Wear Engine 时要关注权限申请、消息大小、采样率和批量上报策略。只有把功耗和通信成本控制住,穿戴体验才能变得可用而不是累赘。
下一篇我们转向智慧屏,看看大屏 TV 上如何设计内容和交互。
参考阅读
华为开发者联盟:Wear Engine 开发指南
华为开发者联盟:Background Tasks Kit 开发指南
HarmonyOS 设计规范:穿戴设备 UX