使用 Health Services 模拟传感器数据

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

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

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

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

使用 Health Services 传感器面板

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

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

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

  1. 创建或打开一个Android 虚拟设备 (AVD),并在模拟器上运行您的应用
  2. 在模拟器面板中,选择 Wear Health ServicesOpen Wear Health Services panel Wear Health Services 面板打开,显示了不同 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

合成运动

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 次/分钟 1.4 米/秒 20.0 米/分钟 true
跑步 170 次/分钟 2.3 米/秒 20.0 米/分钟 true
徒步 150 次/分钟 1.3 米/秒 20.0 米/分钟 true
游泳 150 次/分钟 1.6 米/秒 0.0 米/分钟 true
跑步机跑步 160 次/分钟 2.3 米/秒 20.0 米/分钟 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

健康服务可能需要长达一分钟才能提供跌倒事件。