使用 Health Services 模拟传感器数据

使用 Wear OS 上的 Health Services 生成的合成数据来测试您的应用,就好像真的发生了运动一样。

如果您在运行 Wear OS 3(API 级别 30 或更高版本)的模拟器上进行测试,则可以使用模拟器生成的合成数据。请查阅以下指南,详细了解 Wear OS 3 及更高版本合成数据生成的差异。

在 Wear OS 4 及更高版本上使用合成数据

如果您在运行 Wear OS 4(API 级别 33 或更高版本)的模拟器上进行测试,则可以使用模拟器生成的合成数据来测试您的应用。这引入了一些改进,改进了 Wear OS 早期版本中合成数据生成的机制。

  • Wear OS 4 及更高版本上的合成数据生成与 Health Services API 生命周期集成。这意味着无需使用 adb 命令来启动或停止运动。相反,您可以像用户一样在应用内启动或停止运动。

  • 扩展对运动事件的支持:您可以模拟接收 自动暂停和恢复事件跌倒事件睡眠检测高尔夫挥杆检测

使用 Health Services 传感器面板

Android Studio Koala 功能更新(Canary) 包括一个 Wear OS 上的 Health Services 传感器面板。该面板可用于模拟设备是否具有特定的传感器功能,这在构建 Wear OS 上的健身应用时非常重要。

您还可以使用该面板更改指标的值并观察您的应用如何进行调整。

要打开和使用该面板,请执行以下操作

  1. 创建或打开一个Android虚拟设备 (AVD),并在模拟器上运行您的应用
  2. 在模拟器面板中,选择**Wear 健康服务**。打开 Wear 健康服务面板**Wear 健康服务**面板随即打开,显示不同 Android 设备上可用的传感器列表。

面板打开后,您可以执行以下操作

  • 在**标准功能**、**所有功能**(默认)或**自定义**之间切换。选择**应用**将当前功能列表发送到模拟设备,选择**重置**将功能列表恢复为其默认的开/关值。
  • 选择**触发事件**下拉按钮后,触发不同的用户事件。在这里,您可以**触发健身活动的自动暂停/恢复**、**触发用户触发的睡眠事件**以及**触发用户在高尔夫球场或迷你高尔夫球场上击出的高尔夫球**。
  • 在模拟器上安装的应用中开始锻炼后,覆盖传感器值。输入不同锻炼指标的新值后,选择**应用**以将这些值与模拟器同步。这对于测试您的应用如何处理不同的锻炼条件和用户的健身趋势很有用。

使用模拟器生成合成数据

您也可以在没有传感器面板的情况下运行您的应用,并让模拟器自动生成数据。

使用应用内控件启动、暂停和结束合成数据生成。

另请注意,模拟器为每次锻炼生成相同的数据值。

模拟事件

您可以在模拟器中模拟各种事件,例如AUTO_PAUSE_DETECTED。可以使用以下命令触发这些事件

adb shell am broadcast -a "whs.event-key" com.google.android.wearable.healthservices

合成事件

事件

自动暂停检测

whs.AUTO_PAUSE_DETECTED

自动恢复检测

whs.AUTO_RESUME_DETECTED

跌倒检测

whs.FALL_OVER

睡眠检测

whs.START_SLEEPING

停止睡眠检测

whs.STOP_SLEEPING

高尔夫球击球检测

whs.GOLF_SHOT

例如,您可以使用以下命令触发自动暂停事件

​​adb shell am broadcast -a "whs.AUTO_PAUSE_DETECTED" com.google.android.wearable.healthservices

对于高尔夫球击球事件,您应该为高尔夫球击球挥杆类型指定其他参数,如下所示

高尔夫球击球挥杆类型

参数

推杆挥杆类型

putt

部分挥杆类型

partial

完整挥杆类型

full

在指定高尔夫球击球事件后添加高尔夫球击球挥杆类型

adb shell am broadcast -a "whs.GOLF_SHOT" --es golf_shot_swing_type \
  "golf-swing-type-parameter" com.google.android.wearable.healthservices

例如,以下命令触发部分高尔夫球击球

adb shell am broadcast -a "whs.GOLF_SHOT" --es golf_shot_swing_type "partial" \
  com.google.android.wearable.healthservices

在 Wear OS 3 上使用合成数据

如果您正在运行 Wear OS 3 的模拟器上进行测试,则还可以使用合成数据来测试您的应用。

启用合成数据生成

完成以下步骤以在 Wear OS 3 上启用合成数据生成。

  1. 启用开发者选项
  2. 发出以下adb命令以启用合成模式

    adb shell am broadcast \
    -a "whs.USE_SYNTHETIC_PROVIDERS" \
    com.google.android.wearable.healthservices
    

启用合成数据生成后,发出本页面上描述的命令来控制“合成用户”的行为。

禁用合成数据生成

要切换回使用真实传感器,请运行以下命令

adb shell am broadcast \
-a "whs.USE_SENSOR_PROVIDERS" \
com.google.android.wearable.healthservices

合成锻炼

健康服务支持以下锻炼类型

  • 步行:whs.synthetic.user.START_WALKING
  • 跑步:whs.synthetic.user.START_RUNNING
  • 远足:whs.synthetic.user.START_HIKING
  • 游泳:whs.synthetic.user.START_SWIMMING
  • 跑步机跑步:whs.synthetic.user.START_RUNNING_TREADMILL

这些锻炼会为以下数据类型生成逼真的合成数据

  • 心率
  • 每分钟步数
  • GPS 位置,使用单个默认路线
  • 活动持续时间
  • 海拔和楼层

此外,还可以生成以下状态

  • 睡眠状态 - 睡眠或清醒
  • 跌倒检测

开始

要开始模拟锻炼,请向com.google.android.wearable.healthservices发出相应的广播

# start the "walking" synthetic exercise
$ adb shell am broadcast \
-a "whs.synthetic.user.START_WALKING" \
com.google.android.wearable.healthservices

每个活动都预设了受支持指标

活动 心率 平均速度 海拔变化 使用位置
步行 120 bpm 1.4 m/sec 20.0 m/min true
跑步 170 bpm 2.3 m/sec 20.0 m/min true
远足 150 bpm 1.3 m/sec 20.0 m/min true
游泳 150 bpm 1.6 m/sec 0.0 m/min true
跑步机跑步 160 bpm 2.3 m/sec 20.0 m/min false

停止

要停止合成活动,请使用以下命令

adb shell am broadcast \
-a "whs.synthetic.user.STOP_EXERCISE" \
com.google.android.wearable.healthservices

自定义

要更精确地控制生成哪些指标,请使用操作字符串whs.synthetic.user.START_EXERCISE启动自定义锻炼活动。提供以下任何组合的标志

  • --ei exercise_options_duration_secs <int>:锻炼持续时间(以秒为单位)。默认值:0
  • --ei exercise_options_heart_rate <int>:心率(以每分钟跳动次数为单位)。平均值:70
  • --ef exercise_options_average_speed <float>:平均速度(以米/秒为单位)。还会影响每分钟步数或节奏。默认值:0
  • --ez exercise_options_use_location <boolean>:是否在锻炼期间发出位置数据,使用默认路线。默认值:false
  • --ef exercise_options_max_elevation_rate <float>:最大可能的海拔变化率(以米/分钟为单位)。默认值:0

例如,以以下方式设置锻炼选项

adb shell am broadcast \
-a "whs.synthetic.user.START_EXERCISE" \
--ei exercise_options_heart_rate 90 \
--ef exercise_options_average_speed 1.2 \
--ez exercise_options_use_location true \
com.google.android.wearable.healthservices

您还可以更改可用的数据类型,无论真实或模拟硬件是否支持特定数据类型。例如,您可以启用或禁用绝对海拔,如下面的代码片段所示

# enable synthetic mode and enable absolute elevation
$ adb shell am broadcast \
-a "whs.CONFIGURE_SYNTHETIC_DEVICE" \
--ez absolute_elevation true \
com.google.android.wearable.healthservices

# enable synthetic mode and disable absolute elevation
$ adb shell am broadcast \
-a "whs.CONFIGURE_SYNTHETIC_DEVICE" \
--ez absolute_elevation false \
com.google.android.wearable.healthservices

其他状态和事件

睡眠状态

您还可以触发合成用户的睡眠状态。支持两种状态:睡眠和清醒。

要进入睡眠状态,请运行此命令

adb shell am broadcast \
-a "whs.synthetic.user.START_SLEEPING" \
com.google.android.wearable.healthservices

要进入清醒状态,请运行此命令

adb shell am broadcast \
-a "whs.synthetic.user.STOP_SLEEPING" \
com.google.android.wearable.healthservices

跌倒检测

要模拟跌倒,请运行此命令

adb shell am broadcast \
-a "whs.synthetic.user.FALL_OVER" \
com.google.android.wearable.healthservices

健康服务可能需要长达一分钟的时间才能传递跌倒事件。