增强跨 Wear OS 设备的应用程序兼容性

Wear 健康服务 API (WHS) 是所有运行 Wear OS 3 及更高版本的设备的强制性组件,因为它为健康和健身开发人员提供了统一的集成界面。构建您的应用程序以优雅地适应许多设备及其不同的功能,以保持跨设备的兼容性,并避免用户体验问题。为此,仅为应用程序使用的客户端声明依赖项。此外,允许您的应用程序根据可用性灵活地显示或删除可选的高级指标。

不同的传感器以不同的频率生成数据,这些频率根据底层硬件和传感器平台因设备而异。例如,设备可能在某个时间戳返回心率,而在另一个时间戳返回位置。创建能够接收不同时间戳或重叠时间戳的独立数据流的应用程序。

本指南介绍了 Wear 健康服务中各个客户端支持的预期行为和数据类型。

运动客户端

以下部分描述了 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] 添加到基础代谢率的活跃卡路里消耗量。这里发出的卡路里考虑了用户在系统设置中指定的身高、体重、年龄和性别。卡路里不考虑您应用中收集的任何用户个人资料数据。报告的总计是在锻炼持续时间内的,不包括锻炼暂停时的时间。

可选的锻炼数据类型

以下数据类型列表仅在某些设备上可用。有关 DataTypes 的完整列表,请参阅 Jetpack 参考。如果 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 上并分批发送到健康服务。这些分批结果将根据系统行为以不同的间隔返回。一些示例包括在传感器缓冲区已满时或用户与显示屏交互时返回批次。

不要假设任何数据类型的预定义或可预测的批处理间隔。

被动监控数据类型

指标 预期数据 说明
HEART_RATE_BPM 每分钟跳动次数 [数据类型:Double] 设备可能以不同的间隔返回心率读数。一些设备可能每秒读取一次。其他设备可能每十分钟读取一次。这些间隔不提供给应用。应用应该优雅地适应不同的采样间隔。
STEPS_DAILY/STEPS [数据类型:Long] 每日步数是自上次重置以来的总步数,重置由 WHS 在午夜触发。这包括在活动锻炼暂停时进行的任何步数。步数是自上次检查以来的细粒度增量。
DISTANCE_DAILY/DISTANCE 米 [数据类型:Double] 从加速度计/步数计算得出。不要在 GPS 期间进行计算,以确保关闭了位置服务的用户仍然可以收到准确的步数。
SPEED [米/秒] [数据类型:Double]
CALORIES_DAILY 千卡 [数据类型:Double] 一天的卡路里,包括活跃卡路里和 BMR。这里发出的卡路里数字考虑了用户在系统设置中指定的身高、体重、年龄和性别。卡路里不会根据您应用中收集的任何用户个人资料数据进行调整。
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] 一天的卡路里,包括活跃卡路里和 BMR。
DISTANCE_DAILY 米 [数据类型:Double] 从加速度计或步数计算得出。不要使用 GPS 计算此值,这样关闭了位置服务的用户仍然可以收到准确的步数。
DAILY_ELEVATION_GAIN 米 [数据类型:Double] 仅包括海拔的正向增量

MeasureClient

使用 MeasureClient 在给定时刻测量心率。

预期行为

MeasureClientPassiveClient 在某些方面相似。它们都提供与锻炼无关的非批处理健康统计数据。您可以使用两者来测量心率,但主要区别在于 MeasureClient 包含心率数据可用性,而 PassiveClient 不包含可用性信息。

数据类型

指标 预期数据 说明
HEART_RATE_BPM 每分钟跳动次数 [数据类型:Double] 还包括可用性

支持的功能

除了锻炼数据类型和被动监控数据类型之外,设备还支持其他功能来触发事件,例如启动锻炼和测量状态,例如睡着或清醒。这些功能中的一些存在于所有设备上,而另一些则仅存在于某些设备上。

事件触发器

所有设备都支持以下常见触发器

  • 距离和步数的每日目标
  • 锻炼目标,包括步数、距离和持续时间。

其他设备可能支持更高级的事件触发器。以下是一些示例

  • 游泳时计数圈数
  • 锻炼目标,包括消耗的卡路里
  • 锻炼目标,包括瞬时速度

状态

所有设备都支持基本状态功能。状态功能是指用户当前是否处于活动锻炼中。

其他设备可能提供其他状态功能。一些其他状态功能包括检测锻炼是否已自动暂停或自动恢复,或者用户是否处于清醒或睡眠状态。

被动监控中的健康警报

一些设备支持健康警报。这些功能并非在所有设备上都受支持。一些健康警报包括检测心率异常或检测跌倒。