Обработка событий тренировки

Сервисы наблюдения за здоровьем поддерживают ExerciseEvents, которые уведомляют приложение о событиях во время тренировки и предоставляют связанные с ними метаданные.

Добавьте зависимости

Чтобы использовать события тренировок, нужна последняя версия SDK сервисов наблюдения за здоровьем.

Чтобы добавить зависимость от сервисов наблюдения за здоровьем, добавьте в проект репозиторий Google Maven. Дополнительную информацию можно найти в статье Репозиторий Maven от Google.

Затем в файл build.gradle на уровне модуля добавьте следующую зависимость:

классный

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

Котлин

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

Проверить возможности

Как и в случае со всеми тренировками и типами данных в сервисах наблюдения за здоровьем, проверяйте возможности при запуске. В частности, для 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!")
        }
      }
    }
  }
}