人体传感器功能仅限专业研究机构使用。
手机侧应用可以通过Wear Engine获取穿戴设备上的传感器信息,并通过打开、关闭命令控制获取传感器数据。
使用传感器相关接口前,需要向手机侧用户申请获取对应权限的授权(参见请求用户授权),否则接口将调用失败。
| 传感器类型 | 申请权限 |
|---|---|
| ECG、PPG、HR | HEALTH_SENSOR人体传感器 |
| ACC、GYRO、MAG | MOTION_SENSOR运动传感器 |
穿戴设备侧无对应的应用,手机侧应用也可以使用该能力获取穿戴设备传感器。
请确保穿戴设备和华为运动健康App处于连接状态。用户可进入App“设备”界面查看设备是否在线。开发者可调用getConnectedDevices方法了解设备是否在线,如果返回列表中不包含目标设备,则提醒用户重新连接该设备。
手机侧应用可以获取穿戴设备上传感器列表,并获得这些传感器的名称、ID、上报周期等参数。
参见已连接穿戴设备查询章节,获取已连接设备列表。
参见目标设备选择章节,从已连接设备列表中选定需要通信的设备。
调用wearEngine中的getSensorClient方法,获取SensorClient对象。
调用getSensorList方法,获取指定连接设备的传感器列表。
// 步骤3 获取SensorClient客户端
let sensorClient: wearEngine.SensorClient = wearEngine.getSensorClient(this.getUIContext().getHostContext());
// 步骤4 获取指定连接设备的传感器列表
sensorClient.getSensorList(targetDevice.randomId).then((sensorList) => {
console.info(`Succeeded in getting sensor list, result is ${sensorList}`);
}).catch((error: BusinessError) => {
console.error(`Failed to get sensor list. Code is ${error.code}, message is ${error.message}`);
}) 手机侧通过getSensorList方法获取传感器列表后可以通过subscribeSensor方法订阅指定传感器数据上报。通过unsubscribeSensor方法可取消订阅指定传感器的数据上报。
参见已连接穿戴设备查询章节,获取已连接设备列表。
参见目标设备选择章节,从已连接设备列表中选定需要通信的设备。
参见上一小节获取穿戴设备的传感器列表,获取设备的传感器列表信息。
核对传感器列表中是否存在目标传感器。
订阅或取消订阅传感器数据上报。
let sensorClient: wearEngine.SensorClient = wearEngine.getSensorClient(this.getUIContext().getHostContext());
let sensorList: wearEngine.Sensor[] = await sensorClient.getSensorList(targetDevice.randomId);
sensorList.forEach((sensor, idx, arr) => {
if (sensor.type === wearEngine.SensorType.ACCELEROMETER) {
let callback = (sensorResult: wearEngine.SensorResult) => {
console.info(`Succeeded in getting sensor result, result is ${sensorResult}`);
}
// 订阅传感器数据上报
sensorClient.subscribeSensor(targetDevice.randomId, wearEngine.SensorType.ACCELEROMETER, callback).then(() => {
console.info(`Succeeded in subscribing sensor data.`);
}).catch((error: BusinessError) => {
console.error(`Failed to subscribe sensor data. Code is ${error.code}, message is ${error.message}`);
})
// 取消传感器数据上报
sensorClient.unsubscribeSensor(targetDevice.randomId, wearEngine.SensorType.ACCELEROMETER, callback).then(() => {
console.info(`Succeeded in unsubscribing sensor data.`);
}).catch((error: BusinessError) => {
console.error(`Failed to unsubscribe sensor data. Code is ${error.code}, message is ${error.message}`);
})
}
})
传感器成功打开后,会根据每个传感器的上报周期,连续不断地通过subscribeSensor方法入参的回调函数上报数据,数据上报时长可由开发者通过取消订阅传感器接口自行控制。每组数据都有时间戳属性,建议开发者根据时间戳进行数据对齐。不同的传感器上报的数据格式是不同的,具体可参见:穿戴设备传感器数据格式及样例。
传感器分为多通道传感器,如PPG、ECG,和非多通道传感器,如ACC。对于多通道传感器上报的数据,可以通过SensorData中的channel字段来区分通道。
设备连接状态断开,设备会停止传感器数据的上报,需要开发者主动订阅设备的连接状态,设备重新连接上后主动调用subscribeSensor方法订阅指定传感器数据上报。
数据上报数量非固定,示例中给出的是通常上报结果,实际有可能根据设备原因增加或者减少数据。
| 传感器 | 支持多通道 | 采集周期(ms) | 上报周期(ms) | 数据格式 | 数据样例 |
|---|---|---|---|---|---|
| ACC | No | 10 | 100 | 1次上报10组,每组3个数据,分别代表x轴、y轴、z轴加速度,共30个数据。 单位:m/s^2,4096为1个重力加速度g | [34303.0, 10753.0, 54799.0, 33023.0, 15617.0, 2576.0, 33535.0, 9729.0, 5136.0, 24063.0, 6145.0, 62479.0, 23295.0, 6145.0, 58895.0, 35071.0, 9729.0, 57359.0, 46335.0, 10497.0, 53263.0, 55039.0, 4609.0, 57359.0, 42495.0, 2305.0, 60943.0, 41471.0, 64768.0, 57359.0] 说明: ACC、GYRO原始数据值范围为有符号Short,目前上报后的数据值范围为无符号Short,需要开发者自行进行转换。 |
| GYRO | No | 10 | 100 | 1次上报10组,每组3个数据,分别代表x轴、y轴、z轴角速度,共30个数据。 单位:70mdps/LSB | [34303.0, 10753.0, 54799.0, 33023.0, 15617.0, 2576.0, 33535.0, 9729.0, 5136.0, 24063.0, 6145.0, 62479.0, 23295.0, 6145.0, 58895.0, 35071.0, 9729.0, 57359.0, 46335.0, 10497.0, 53263.0, 55039.0, 4609.0, 57359.0, 42495.0, 2305.0, 60943.0, 41471.0, 64768.0, 57359.0] |
| HR | No | 1000 | 1000 | 1次1个数据,代表每分钟心跳次数。 单位:次/分钟 | [80.0] |
| MAG | No | 100 | 100 | 1次上报1组,每组4个数据,分别代表x轴、y轴、z轴磁场强度,最后一个数据无实际意义,无需关注。 单位:μT | [3.9310358, 21.161278, -34.467373, 0.0] |
| PPG | Yes | 10 | 100 | 三路数据(GREEN/RED/IR) 100ms上报10包数据,每包数据4个字节。 | [758457.0, 2273675.0, 2276247.0, 2278939.0, 2281102.0, 2283411.0, 2285717.0, 2288307.0, 2290863.0, 2293297.0](一路数据) |
| ECG | Yes | 2 | 100 | 一路数据100ms上报50包数据。不区分左右手。 单位:nV | [-5020837.0, -4742510.0, -4896082.0, -4938397.0, -4796497.0, -4886598.0, -4871642.0, -4943139.0, -5209429.0, -5294787.0, -5161278.0, -5174045.0, -5588071.0, -5323970.0, -5342938.0, -5028133.0, -5094523.0, -5240070.0, -5394008.0, -5540285.0, -5655190.0, -5589895.0, -5539920.0, -5559618.0, -5623090.0, -5501618.0, -5747845.0, -5871870.0, -5814964.0, -5885002.0, -6069946.0, -5678536.0, -5839040.0, -5903971.0, -5959417.0, -6172084.0, -6263279.0, -6029455.0, -6097669.0, -6165518.0, -6174638.0, -6284072.0, -6347544.0, -6319091.0, -6085631.0, -6143631.0, -6382198.0, -6250512.0, -6396059.0, -6424512.0] |