鸿蒙开发--Health_Industry_Hmos_Sdk
华为Health Industry SDK是为运动健康行业开发者提供的工具包,支持读取穿戴设备的健康数据(如心率、体温、运动记录等)并控制设备功能。与面向普通应用的Health Service Kit不同,该SDK需连接华为穿戴设备,支持获取原始数据及实时订阅功能。主要功能包括设备设置、数据查询、事件订阅和应用管理。开发需配置HarmonyOS环境,通过证书鉴权后,可获取设备对象进行数据操作。典型
HarmonyOS Health Industry SDK:让穿戴设备为你记录健康数据
什么是 Health Industry SDK
你有没有用过华为手表记录运动数据?比如跑步的距离、心率、睡眠质量等等。这些数据都存在手表里,但你想在手机 App 里查看这些数据怎么办?
Health Industry SDK(运动健康行业开发工具包)就是让开发者能访问这些数据的工具。它面向运动健康行业应用开发者,提供华为穿戴设备的开放能力。简单说,它让你的应用可以读取华为手表/手环上的健康数据,还可以设置设备的各种功能。
你可能会问:前面不是有个 Health Service Kit 吗?有什么区别?区别很大:
- Health Service Kit:面向普通应用开发者,不需要穿戴设备,只要用户有华为账号就行。主要做运动数据的读写,数据存在华为的健康数据平台里
- Health Industry SDK:面向行业应用开发者,需要穿戴设备。可以读取手表上的原始数据(心率、体温、血氧等),还可以控制手表的功能
如果你做的是一个普通的运动记录 App,用 Health Service Kit 就够了。如果你做的是一个医疗健康 App,需要读取手表的实时心率、体温等数据,那就得用 Health Industry SDK。
核心功能
Health Industry SDK 提供以下功能:
- 设备设置:设置和查询设备信息、开关状态。比如设置单位制(公制/英制)、设置科学睡眠开关。这些设置会直接修改手表的配置
- 数据查询:查询健康数据、运动数据、日常活动数据。比如查询用户的体温记录、运动记录、睡眠记录等。这些数据是手表采集的原始数据
- 事件订阅:订阅设备状态和数据更新。比如订阅实时心率数据,当用户心率变化时,你的 App 能立刻收到通知。也可以订阅运动数据更新,用户跑完步后自动通知你
- 应用管理:设置行业应用息屏不断网、保活、开机自启动。这些功能适合需要后台持续运行的应用,比如实时心率监测
环境搭建
硬件要求
- 设备类型:华为穿戴设备(手表、手环)
- HarmonyOS 系统:HarmonyOS NEXT Developer Beta1 及以上
软件要求
- DevEco Studio 版本:DevEco Studio 5.1.1 Release 及以上
- HarmonyOS SDK 版本:HarmonyOS 5.1.1 Release SDK 及以上
搭建步骤
- 安装 DevEco Studio:去华为开发者官网下载安装
- 配置开发环境:确保网络环境正常
- 设备调试:使用真机进行调试
项目结构
├── entry/src/main
│ ├── src
│ │ ├── common
│ │ │ ├── queryData
│ │ │ │ ├── temperature.ets // 查询体温数据接口
│ │ │ │ └── workout.ets // 查询单次运动数据接口
│ │ │ ├── settingInfo
│ │ │ │ ├── truSleep.ets // 查询、设置科学睡眠开关接口
│ │ │ │ └── unit.ets // 查询、设置单位制接口
│ │ │ ├── subscribeEvent
│ │ │ │ ├── heartRate.ets // 订阅心率数据接口
│ │ │ │ └── workoutUpdate.ets // 订阅单次运动数据更新接口
│ │ ├── entryability
│ │ │ └── EntryAbility.ets // 程序入口类
│ │ └── pages
│ │ └── Index.ets // 主页面
│ ├── resources
│ │ ├── rawfile
│ │ │ └── auth.cer // 鉴权证书文件
│ └── module.json5
项目结构比较清晰,按功能分成了几个目录:
queryData:数据查询相关接口,包括体温查询和运动数据查询settingInfo:设备设置相关接口,包括科学睡眠开关和单位制设置subscribeEvent:事件订阅相关接口,包括心率订阅和运动数据更新订阅rawfile/auth.cer:鉴权证书文件,用 SDK 之前必须配置
第一步:导入模块
import { industryServiceClient, IndustryService } from '@huawei-cbg/health-industry-sdk';
import { BusinessError } from '@ohos.base';
导入 Health Industry SDK 的核心模块:
industryServiceClient:客户端接口,用来鉴权和获取设备。你可以理解为"SDK 的入口"IndustryService:设备接口,用来查询数据和设置功能。所有的数据查询和设备设置都通过它来完成
第二步:设置鉴权证书
在使用 SDK 之前,需要先进行鉴权。鉴权就像"登录",告诉华为"我是合法的开发者,有权访问这些数据"。
第一步是设置鉴权证书。证书是一个文件,你需要从华为开发者后台申请,然后放到项目的 src/main/resources/rawfile 目录下。
// certName 为鉴权证书的证书名称
industryServiceClient.setCertPath(context, certName).then(() => {
// 设置鉴权证书路径成功
console.info(`Succeeded in setting certPath.`);
}).catch((err: BusinessError) => {
// 设置鉴权证书路径失败
throw new Error(`Failed to set certPath. Code is ${err.code}, message is ${err.message}.`);
});
调用 setCertPath 设置证书路径。certName 是证书文件的名称,比如 auth.cer。
为什么要用证书?因为 Health Industry SDK 涉及用户的健康数据,这是非常敏感的信息。证书机制确保只有合法的应用才能访问这些数据,保护用户隐私。
第三步:进行鉴权
设置好证书后,就可以进行鉴权了。
industryServiceClient.getAuthorization(context).then(() => {
// 鉴权成功
console.info(`Succeeded to getting authorization.`);
}).catch((err: BusinessError) => {
// 鉴权失败
throw new Error(`Failed to get authorization. Code is ${err.code}, message is ${err.message}.`);
});
调用 getAuthorization 进行鉴权。鉴权需要访问网络,确保设备已连接网络。
鉴权成功后,你就可以使用 SDK 的各种功能了。鉴权失败的话,可能是证书配置有问题,或者网络不通。
第四步:获取设备对象
鉴权成功后,需要获取设备对象。设备对象就像"遥控器",后续所有的操作都通过它来完成。
industryServiceClient.getDeviceManager(context).getDevices().then(devices => devices?.[0])
.then((device: IndustryService.Device) => {
// 获取设备对象成功,可以开始使用了
}).catch((err: BusinessError) => {
// 获取设备列表失败
throw new Error(`Failed to get devices. Code is ${err.code}, message is ${err.message}.`);
});
获取设备对象的过程:
getDeviceManager(context):获取设备管理器getDevices():获取已连接的设备列表devices?.[0]:取第一个设备。如果你有多个设备,可以遍历列表
获取到 IndustryService.Device 设备对象后,就可以调用各种接口了。
第五步:查询和设置单位制
// 查询单位制
device.getSettingInfo(IndustryService.SettingType.UNIT).then((result: IndustryService.Unit) => {
// 查询单位制成功
console.info(`Succeeded in getting unit, result is ${result}.`);
}).catch((err: BusinessError) => {
// 查询单位制失败
throw new Error(`Failed to get unit. Code is ${err.code}, message is ${err.message}.`);
});
调用 getSettingInfo 查询当前的单位制设置。返回值是 IndustryService.Unit 类型:
Metric:公制,用公里、公斤、摄氏度Imperial:英制,用英里、磅、华氏度
你可能会问:为什么要设置单位制?因为不同国家的用户习惯不同。中国用户习惯用公制,美国用户习惯用英制。你可以根据用户的偏好来设置。
// 设置单位制
device.setSettingInfo(IndustryService.SettingType.UNIT, unit).then(() => {
// 设置单位制成功
console.info('Succeeded in setting unit.');
}).catch((err: BusinessError) => {
// 设置单位制失败
throw new Error(`Failed to set unit. Code is ${err.code}, message is ${err.message}.`);
});
调用 setSettingInfo 设置单位制。设置后,手表上显示的距离、速度等数据就会按照新的单位制来显示。
第六步:查询和设置科学睡眠开关
// 查询科学睡眠开关状态
device.getSettingInfo(IndustryService.SettingType.TRU_SLEEP_SWITCH).then((value: boolean) => {
// 查询科学睡眠开关状态成功
console.info(`Succeeded in getting TruSleepSwitch, value is ${value}.`);
}).catch((error: BusinessError) => {
// 查询科学睡眠开关状态失败
throw new Error(`Failed to get TruSleepSwitch. Code is ${error.code}, message is ${error.message}.`);
});
查询科学睡眠开关的状态,返回值是 boolean 类型:
true:科学睡眠已开启。手表会用更高级的算法来分析用户的睡眠质量false:科学睡眠已关闭。手表用普通的睡眠检测算法
科学睡眠是什么?简单说就是华为手表的高级睡眠分析功能。开启后,手表会记录你的深睡、浅睡、REM(快速眼动)等睡眠阶段,给你更详细的睡眠报告。
// 设置科学睡眠开关状态
device.setSettingInfo(IndustryService.SettingType.TRU_SLEEP_SWITCH, value).then(() => {
// 设置科学睡眠开关状态成功
console.info('Succeeded in setting TruSleepSwitch.');
}).catch((error: BusinessError) => {
// 设置科学睡眠开关状态失败
throw new Error(`Failed to set TruSleepSwitch. Code is ${error.code}, message is ${error.message}.`);
});
设置科学睡眠开关,把 value 设置为 true 或 false 就可以了。
第七步:查询体温数据
// 构造查询体温数据参数
let queryParam: IndustryService.QueryOptions = {
type: IndustryService.DataType.TEMPERATURE,
startTime: 1736777580, // 查询开始时间戳(秒级)
endTime: 1736777580 // 查询结束时间戳(秒级)
};
// 调用 Device 对象的 queryHistoryData 方法查询体温数据
device.queryHistoryData(queryParam).then((data: IndustryService.HistoryData[]) => {
// 查询体温数据成功
console.info(`Succeeded in querying temperature data, result is ${JSON.stringify(data)}.`);
}).catch((err: BusinessError) => {
// 查询体温数据失败
throw new Error(`Failed to query temperature data. Code is ${err.code}, message is ${err.message}.`);
});
调用 queryHistoryData 查询体温数据。需要传入查询参数:
type:数据类型,这里用TEMPERATURE表示体温。还有其他类型,比如WORKOUT(运动)、SLEEP(睡眠)等startTime:开始时间戳(秒级)。注意是秒级,不是毫秒级endTime:结束时间戳(秒级)
返回的是一个数组,包含了这个时间段内的所有体温记录。每条记录有时间戳和体温值。
你可能会问:手表怎么测体温?华为手表有皮肤温度传感器,可以测量手腕的皮肤温度。虽然不是精确的体温,但可以用来监测体温变化趋势。
第八步:查询单次运动数据
// 构造查询单次运动数据查询参数
let queryParam: IndustryService.QueryOptions = {
type: IndustryService.DataType.WORKOUT,
startTime: 1740195486, // 查询开始时间戳(秒级)
endTime: 1740206286 // 查询结束时间戳(秒级)
};
// 调用 Device 对象的 queryHistoryData 方法查询单次运动数据
device.queryHistoryData(queryParam).then((result: IndustryService.HistoryData[]) => {
// 查询单次运动数据成功
console.info(`Succeeded in querying workout, result: ${JSON.stringify(result)}`);
}).catch((err: BusinessError) => {
// 查询单次运动数据失败
throw new Error(`Failed to query workout. Code is ${err.code}, message is ${err.message}.`);
});
查询单次运动数据,和查询体温数据类似,只是 type 换成了 WORKOUT。
返回的运动数据包括:运动类型、开始时间、结束时间、距离、卡路里、心率等。这些数据是手表在用户运动时自动记录的。
第九步:订阅心率数据
如果你想实时获取用户的心率数据,可以订阅心率数据。这在运动监测、健康预警等场景下很有用。
// 订阅心率数据
device.subscribeRealTimeData(IndustryService.RealTimeDataType.HEART_RATE, callback).then(() => {
// 订阅心率数据成功
console.info('Succeeded in subscribing heartRate.');
}).catch((err: BusinessError) => {
// 订阅心率数据失败
throw new Error(`Failed to subscribe heartRate. Code is ${err.code}, message is ${err.message}.`);
});
调用 subscribeRealTimeData 订阅心率数据。传入一个回调函数,当有新的心率数据时,会调用这个回调函数。
订阅后,手表会实时把心率数据发送到你的 App。你可以用这个数据来做实时心率显示、心率异常预警等。
// 取消订阅心率数据
device.unSubscribeRealTimeData(IndustryService.RealTimeDataType.HEART_RATE, callback).then(() => {
// 取消订阅心率数据成功
console.info('Succeeded in unsubscribing heartRate.');
}).catch((err: BusinessError) => {
// 取消订阅心率数据失败
throw new Error(`Failed to unsubscribe heartRate. Code is ${err.code}, message is ${err.message}.`);
});
不需要的时候,调用 unSubscribeRealTimeData 取消订阅。注意:取消订阅时的回调函数要和订阅时的是同一个对象,否则取消不了。
为什么要取消订阅?因为订阅会保持和手表的连接,消耗电量和网络资源。如果你不需要实时数据了,及时取消订阅可以省电。
第十步:订阅运动数据更新
// 订阅单次运动数据更新
device.subscribeEvent(IndustryService.EventType.WORKOUT_UPDATE_EVENT, callback).then(() => {
// 订阅单次运动数据更新成功
console.info('Succeeded in subscribing workoutUpdateEvent.');
}).catch((err: BusinessError) => {
// 订阅单次运动数据更新失败
throw new Error(`Failed to subscribe workoutUpdateEvent. Code is ${err.code}, message is ${err.message}.`);
});
订阅运动数据更新,当用户完成一次运动后,会触发回调函数。比如用户跑完步,手表会自动通知你的 App,你就可以拉取这次运动的数据了。
// 取消订阅单次运动数据更新
device.unSubscribeEvent(IndustryService.EventType.WORKOUT_UPDATE_EVENT, callback).then(() => {
// 取消订阅成功
console.info('Succeeded in unsubscribing WORKOUT_UPDATE_EVENT.');
}).catch((err: BusinessError) => {
// 取消订阅失败
throw new Error(`Failed to unsubscribe WORKOUT_UPDATE_EVENT. Code is ${err.code}, message is ${err.message}.`);
});
取消订阅运动数据更新。
实际应用场景
Health Industry SDK 在实际开发中有很多用途:
运动健康应用
// 查询用户的运动数据
async function getUserWorkoutData(startTime: number, endTime: number) {
let queryParam: IndustryService.QueryOptions = {
type: IndustryService.DataType.WORKOUT,
startTime: startTime,
endTime: endTime
};
let data = await device.queryHistoryData(queryParam);
// 展示运动数据,比如做成运动记录列表
displayWorkoutData(data);
}
运动健康应用可以查询用户的历史运动数据,展示在页面上。用户可以查看自己的运动记录、运动趋势等。
实时心率监测
// 实时监测用户心率
function startHeartRateMonitoring() {
device.subscribeRealTimeData(IndustryService.RealTimeDataType.HEART_RATE, (data) => {
// 更新心率显示
updateHeartRateDisplay(data.heartRate);
// 检查心率是否异常
if (data.heartRate > 100) {
showWarning('心率过高,请注意休息');
}
});
}
实时心率监测可以订阅心率数据,当心率异常时给用户提示。这在运动监测、老年人健康监护等场景下很有用。
睡眠质量分析
// 查询用户的睡眠数据
async function getSleepData(startTime: number, endTime: number) {
let queryParam: IndustryService.QueryOptions = {
type: IndustryService.DataType.SLEEP,
startTime: startTime,
endTime: endTime
};
let data = await device.queryHistoryData(queryParam);
// 分析睡眠质量,比如深睡时长、浅睡时长、REM时长
analyzeSleepQuality(data);
}
睡眠质量分析可以查询用户的睡眠数据,分析深睡、浅睡、REM 等睡眠阶段,给用户提供睡眠建议。
适用场景
Health Industry SDK 适合以下场景:
- 运动健康应用:记录和分析运动数据
- 医疗健康应用:监测心率、体温等健康指标
- 企业健康管理:员工健康管理平台
- 保险应用:根据健康数据提供个性化保险方案
- 健身应用:记录健身数据,提供健身建议
注意事项
- 鉴权要求:使用前需要进行鉴权,需要联网。鉴权失败的话,所有接口都用不了
- 证书配置:需要配置鉴权证书,证书从华为开发者后台申请
- 设备支持:需要华为穿戴设备,没有设备的话无法使用
- 数据类型:支持体温、心率、运动、睡眠等多种数据类型,要选择正确的类型
- 订阅管理:不需要时要及时取消订阅,避免资源浪费和电量消耗
核心流程图
Health Industry SDK 的初始化与数据访问流程:
SDK 支持的四大功能模块:
总结
Health Industry SDK 让你的应用可以访问华为穿戴设备的健康数据,核心流程:
- 配置鉴权证书,告诉 SDK 你是合法的开发者
- 进行鉴权,建立和华为服务器的连接
- 获取设备对象,拿到和手表通信的"遥控器"
- 查询或设置设备功能,读取数据或修改配置
- 订阅实时数据,实时获取心率、运动等数据
掌握了这些,你就能开发出各种运动健康应用,让用户更好地管理自己的健康。
更多推荐




所有评论(0)