Wear Health Services API (WHS) 是所有运行 Wear OS 3 及更高版本的设备的必备组件,因为它为健康和健身开发者提供了一个一致的集成界面。构建您的应用以优雅地适应许多设备及其不同的功能,以保持跨设备的兼容性并避免用户体验问题。为此,仅为您的应用使用的客户端声明依赖项。此外,允许您的应用根据可用性灵活地显示或删除可选的高级指标。
不同的传感器以不同的频率生成数据,这些频率因设备而异,具体取决于底层硬件和传感器平台。例如,设备可能会在一个时间戳返回心率,而在另一个时间戳返回位置。创建可以以不同时间戳或重叠时间戳接收独立数据流的应用。
本指南介绍了 Wear Health Services 中各个客户端支持的预期行为和数据类型。
锻炼客户端
以下部分介绍了 ExerciseClient
的预期行为和数据类型。
预期行为
对于 ExerciseClient
,某些锻炼类型取决于某些数据类型的可用性。例如,轮椅锻炼仅在支持轮椅推力时才可用。根据其在给定设备上的可用性启用和禁用这些选项。
大多数锻炼数据类型以一秒钟的间隔进行采样和传递,但也有一些例外。
- 在某些情况下,某些锻炼数据类型每秒更新多次。例如,当用户跑步时,步数每秒更新多次。
- 对于某些数据类型,仅当当前值与前一个值不同时才会传递更新。
数据传输可以是流式传输或批量传输。当应用处理器开启时,数据会进行流式传输,通常是在显示屏开启且处于交互状态时。一旦显示屏关闭或进入环境模式(开启但非交互状态),数据就会被批量传输以节省电量。批量数据会在应用处理器再次开启时传递给应用,无论是手表退出环境模式,还是批量缓冲区已满,具体取决于设备。在设备处于环境模式时,采样率保持不变,因此传递的批次仍然包含高频数据点。
数据类型完全来源于手表上传感器生成的数据。例如,位置数据完全来自手表,而不是手机。
数据类型
ExerciseClient
API 允许您启动、暂停、恢复和停止不同类型的锻炼。对于每种锻炼,WHS 都定义了一组可供您用于该锻炼类型的数据类型。这可以节省电量并简化您的应用逻辑,因为对于给定锻炼不需要的传感器不会被打开。例如,在开始跑步时,仅提供和跟踪户外跑步的位置数据。在开始骑自行车锻炼时,不会提供或跟踪步数。以下部分提供了 ExerciseClient
中支持的数据类型的描述。
保证的锻炼数据类型
以下锻炼数据类型在所有设备上都可用。
- 样本数据类型都有一个对应的 _STATS 数据类型,它返回锻炼过程中的最小值、最大值和平均值。例如,可以使用 PACE_STATS 数据类型提取 PACE 统计数据。
- 间隔数据类型都有一个对应的 _TOTAL 数据类型,它返回锻炼过程中的累积值。例如,可以使用 DISTANCE_TOTAL 数据类型提取 DISTANCE 统计数据。
指标 | 预期数据 | 关于预期行为的说明 |
HEART_RATE_BPM | 每分钟心跳次数 [数据类型:Double] | 所有设备在锻炼期间每秒钟采样一次心率。一些设备每秒钟报告一次 BPM 值。一些设备仅在 BPM 自上次值以来发生变化时才报告 BPM。不要期望在所有设备上每隔一秒钟都收到一个 BPM 值。 |
LOCATION | 纬度和经度 [数据类型:Double] | 位置数据仅基于手表 GPS。不要期望位置数据来自融合位置提供程序或其他 Android 服务)。每个数据点还包括一个精度值(也称为水平位置误差)和可用性。 |
STEPS | [数据类型:Long] | 步数是在锻炼期间的运行总计,不包括锻炼暂停的时间 |
DISTANCE | 米 [数据类型:Double] | 在可用时根据基于 GPS 的位置计算,否则根据步数计算。总计是指锻炼期间的总计,不包括锻炼暂停的时间。 |
SPEED | [米/秒] [数据类型:Double] | 返回最小值、最大值和平均值。这些值是在锻炼期间计算的,不包括锻炼暂停的时间。 |
PACE | [秒/米] [数据类型:Double] | 如果速度为 0,则默认值为 0。平均值是在锻炼期间计算的,不包括锻炼暂停的时间。 |
ELEVATION_GAIN | 米。[数据类型:Double] | 海拔的正向变化。总计是在锻炼期间报告的,不包括锻炼暂停的时间。 |
TOTAL_CALORIES | 千卡 [数据类型:Double] | 消耗的活跃卡路里加基础代谢率。此处发出的卡路里会考虑系统设置中指定的用户的的身高、体重、年龄和性别。卡路里不会考虑您的应用中收集的任何用户个人资料数据。报告的总计是在锻炼期间计算的,不包括锻炼暂停的时间。 |
可选的锻炼数据类型
以下数据类型列表仅在某些设备上可用。请参阅 Jetpack 参考以获取 DataTypes 的完整列表。如果 DataType 不在前面的“必需/保证”列表中,则它是可选的。
请参阅以下可选数据类型的示例。此列表并不详尽
指标 | 预期数据 | 关于预期行为的说明 |
ABSOLUTE_ELEVATION | [数据类型:Double] | |
ELEVATION_LOSS | 米 [数据类型:Double] | 海拔的负向变化。值为正数。例如,1 米的海拔损失返回为 1,而不是 -1。 |
STEPS_PER_MINUTE | [数据类型:Long] | |
WHEELCHAIR_PUSHES | [数据类型:Long] | 轮椅推动的次数,用于基于轮椅的锻炼。 |
REP_COUNT | [数据类型:Long] | |
SWIM_STROKE_COUNT | [数据类型:Long] | |
SWIM_LAP_COUNT | [数据类型:Long] |
每种锻炼的数据类型
每种锻炼类型都会返回不同的数据类型。返回的数据类型与锻炼的需求一致。例如,BIKING 锻炼类型不会返回 STEPS 数据类型。请在运行时使用 Capabilities
方法来确定用户设备上支持哪些数据类型。
至少,**所有锻炼类型都会返回心率和卡路里数据**。其他锻炼可能会支持其他数据类型,具体取决于锻炼的要求。
以下是一些示例
- 冥想或普拉提等锻炼仅支持心率和卡路里
- 篮球或羽毛球等锻炼支持心率、卡路里、距离和步数。
- 步行和跑步等锻炼支持心率、卡路里、距离、步数、速度和配速
- 游泳支持心率、卡路里、距离和游泳圈数
被动监控客户端
以下数据类型对于所有运行 Wear OS 的设备来说都是必需的,以支持被动监控健康数据(如心率和步数)的应用。每个数据类型都必须完全来源于手表上传感器生成的数据。
预期行为
为了节省电量,使用被动监控获得的传感器读数存储在 MCU 上并批量发送到 Health Services。这些批量结果以不同的间隔返回,具体取决于系统行为。例如,在传感器缓冲区已满或用户与显示屏交互时返回批次。
不要假设任何数据类型的任何预定义或可预测的批量间隔。
被动监控数据类型
指标 | 预期数据 | 说明 |
HEART_RATE_BPM | 每分钟心跳次数 [数据类型:Double] | 设备可能会以不同的间隔返回心率读数。有些设备可能会每秒钟读取一次。其他设备可能会每十分钟读取一次。这些间隔不会提供给应用。应用应该能够很好地适应不同的采样间隔。 |
STEPS_DAILY/STEPS | [数据类型:Long] | 每日步数是自上次重置以来采取的步数总数,重置由 WHS 在午夜触发。这包括在主动锻炼暂停期间采取的任何步数。步数是自上次检查以来的粒度增量。 |
DISTANCE_DAILY/DISTANCE | 米 [数据类型:Double] | 根据加速计/步数计算。不要在 GPS 期间计算,以确保已关闭位置服务的用户仍能收到准确的步数。 |
SPEED | [米/秒] [数据类型:Double] | |
CALORIES_DAILY | 千卡 [数据类型:Double] | 一天的卡路里,包括活跃卡路里和基础代谢率。此处发出的卡路里会考虑系统设置中指定的用户的的身高、体重、年龄和性别。卡路里不会根据您的应用中收集的任何用户个人资料数据进行调整。 |
RUNNING_STEPS(可选) | [数据类型:Long] | 锻炼期间和其他情况下的步数增量。同时跟踪两者。 |
WALKING_STEPS(可选) | [数据类型:Long] | |
ELEVATION_GAIN | 米 [数据类型:Double] | 仅包括海拔的正向增量 |
ELEVATION_LOSS | 米 [数据类型:Double] | 仅包括海拔的负向增量 |
FLOORS_DAILY | [数据类型:Double] | 可以表示为“部分”楼层 |
被动监控每日目标
指标 | 预期数据 | 说明 |
STEPS_DAILY | [数据类型:Long] | 每日步数,包括在主动锻炼暂停期间采取的任何步数,是自上次重置以来采取的步数总数。WHS 在午夜重置。 |
FLOORS_DAILY | [数据类型:Double] | 可以表示为“部分”楼梯层。 |
CALORIES_DAILY | 千卡 [数据类型:Double] | 一天的卡路里,包括活跃卡路里和基础代谢率。 |
DISTANCE_DAILY | 米 [数据类型:Double] | 根据加速计或步数计算。不要使用 GPS 计算此值,以便已关闭位置服务的用户仍能收到准确的步数。 |
DAILY_ELEVATION_GAIN | 米 [数据类型:Double] | 仅包括海拔的正向增量 |
MeasureClient
使用 MeasureClient
在特定时刻测量心率。
预期行为
MeasureClient
和 PassiveClient
在某些方面相似。它们都提供与锻炼无关的非批量健康统计数据。您可以使用两者来测量心率,但主要区别在于 MeasureClient
包含心率数据可用性,而 PassiveClient
不包含可用性信息。
数据类型
指标 | 预期数据 | 说明 |
HEART_RATE_BPM | 每分钟心跳次数 [数据类型:Double] | 还包括可用性 |
支持的功能
除了锻炼数据类型和被动监控数据类型外,设备还支持其他功能,例如触发事件(例如开始锻炼)和测量状态(例如睡眠与清醒)。其中一些功能存在于所有设备上,而其他功能仅存在于某些设备上。
事件触发器
所有设备都支持以下常见触发器
- 距离和步数的每日目标
- 步数、距离和持续时间的锻炼目标。
其他设备可能支持更高级的事件触发器。以下是一些示例
- 游泳时计算圈数
- 消耗卡路里的锻炼目标
- 瞬时速度的锻炼目标
状态
所有设备都支持基本状态功能。状态功能是指用户当前是否处于主动锻炼状态
其他设备可能会提供其他状态功能。一些其他状态功能包括检测锻炼是否已自动暂停或自动恢复,或者用户何时处于清醒或睡眠状态。
被动监控中的健康警报
某些设备支持健康警报。这些功能并非所有设备都支持。一些健康警报包括检测心率异常或检测跌倒。
为您推荐
- 注意:当 JavaScript 关闭时,会显示链接文本。
- 活动数据和锻炼
- Wear OS 上的健康服务