使用健康服务模拟传感器数据

使用 Wear OS 上的健康服务生成的合成数据测试您的应用,就好像真的在进行运动一样。

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

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

如果您在运行 Wear OS 4(API 级别 33)或更高版本的模拟器上进行测试,则可以使用模拟器生成的合成数据来测试您的应用。这在 Wear OS 较早版本上的合成数据生成方式的基础上进行了许多改进。

使用健康服务传感器面板

Android Studio Koala 功能更新(Canary) 包含一个 Wear OS 上的健康服务传感器面板。该面板可用于模拟设备是否具有特定传感器功能,这在为 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

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

高尔夫击球挥杆类型

参数

挥杆推杆类型

推杆

挥杆部分类型

部分

挥杆全类型

全部

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

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

合成锻炼

Health Services 支持以下锻炼类型

  • 步行: 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 真的
跑步 170 bpm 2.3 m/sec 20.0 m/min 真的
远足 150 bpm 1.3 m/sec 20.0 m/min 真的
游泳 150 bpm 1.6 m/sec 0.0 m/min 真的
跑步机跑步 160 bpm 2.3 m/sec 20.0 m/min

停止

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

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

Health Services 可能需要长达一分钟的时间才能传递跌倒事件。