人体传感器功能仅限专业研究机构使用。
手机侧应用可以通过Wear Engine获取穿戴设备上的传感器信息,并通过打开、关闭命令控制获取传感器数据。
使用传感器相关接口前,需要向手机侧用户申请获取对应权限的授权(参见请求用户授权),否则接口将调用失败。
传感器类型 | 申请权限 |
|---|---|
ECG、PPG、HR | HEALTH_SENSOR人体传感器 |
ACC、GYRO、MAG | MOTION_SENSOR运动传感器 |
该接口的调用需要在开发者联盟申请运动传感器权限或人体传感器(受限开放,请参考申请接入Wear Engine服务)权限并获得用户授权。
手机侧应用可以获取穿戴设备上传感器列表,并获得这些传感器的名称、ID、上报周期等参数。
// 步骤3 获取SensorClient客户端
let sensorClient: wearEngine.SensorClient = wearEngine.getSensorClient(getContext(this));
// 步骤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}`);
})
该接口的调用需要在开发者联盟申请运动传感器权限或人体传感器权限(受限开放,请参考申请接入Wear Engine服务)并获得用户授权。
手机侧通过getSensorList方法获取传感器列表后可以通过subscribeSensor方法订阅指定传感器数据上报。通过unsubscribeSensor方法可取消订阅指定传感器的数据上报。
let sensorClient: wearEngine.SensorClient = wearEngine.getSensorClient(getContext(this));
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}`);
})
}
})
数据上报数量非固定,示例中给出的是通常上报结果,实际有可能根据设备原因增加或者减少数据。
传感器 | 支持多通道 | 采集周期(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] |