处理锻炼事件

Health Services 支持 ExerciseEvents,当锻炼期间发生事件时,它会通知您的应用并提供关联的元数据。

添加依赖项

使用锻炼事件需要 Health Services SDK 的最新版本。

要添加对 Health Services 的依赖项,您必须将 Google Maven 存储库添加到您的项目中。有关更多信息,请参阅 Google 的 Maven 存储库

然后,在您的模块级 build.gradle 文件中,添加以下依赖项

Groovy

dependencies {
    implementation "androidx.health:health-services-client:1.1.0-alpha04"
}

Kotlin

dependencies {
    implementation("androidx.health:health-services-client:1.1.0-alpha04")
}

检查功能

与 Health Services 中的所有练习和数据类型一样,请在启动时检查功能。特别是对于ExerciseEvents,除了请求ExerciseCapabilities之外,还可以使用ExerciseTypeCapabilities.supportedExerciseEvents来验证给定练习支持哪些练习事件。确认特定ExerciseEvent受支持后,还应使用getExerciseEventCapabilityDetails查询练习事件的功能。

以下示例显示了如何查询功能以确认GOLF_SHOT_EVENT受支持,然后确认GOLF_SHOT_EVENT支持挥杆类型分类。

fun handleCapabilities(capabilities: ExerciseCapabilities) {
  val golfCapabilities = capabilities.typeToCapabilities[ExerciseType.GOLF]
  val golfShotEventSupported =
    golfCapabilities
      ?.supportedExerciseEvents
      ?.contains(ExerciseEventType.GOLF_SHOT_EVENT)
  val golfSwingTypeClassificationSupported =
    golfCapabilities
      ?.getExerciseEventCapabilityDetails(ExerciseEventType.GOLF_SHOT_EVENT)
      ?.isSwingTypeClassificationSupported ?: false
}

在练习中请求练习事件

要开始练习并在练习中请求练习事件,请声明练习的ExerciseConfig并添加exerciseEventType字段。

以下示例请求GOLF_SHOT_EVENT作为GOLF练习的一部分

val config = ExerciseConfig(
  exerciseType = ExerciseType.GOLF,
  dataTypes = setOf(....),
  // ...
  exerciseEventTypes = setOf(ExerciseEventType.GOLF_SHOT_EVENT),
)

注册练习事件更新

您可以接收ExerciseEvent更新作为应用程序用于接收练习更新的现有基础设施的一部分。以下示例显示了如何合并对GolfShotEvent更新的支持

val callback = object : ExerciseUpdateCallback {
  override fun onExerciseUpdateReceived(update: ExerciseUpdate) {
      ...
  }
  // [ExerciseEvent] intended to come through with low latency and out of
  // band of onExerciseUpdateReceived()
  override fun onExerciseEventReceived(event: ExerciseEvent) {
    when (event) {
      is GolfShotEvent -> {
        if (it.swingType == GolfShotSwingType.PUTT) {
          println("Putt detected!")
        }
      }
    }
  }
}