Обработка событий упражнений

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

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

Для использования событий тренировок требуется последняя версия Health Services SDK.

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

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

Groovy

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

Kotlin

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

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

Как и во всех упражнениях и типах данных в Health Services, проверяйте возможности при запуске . В частности, для ExerciseEvents , в дополнение к запросу ExerciseCapabilities , используйте ExerciseTypeCapabilities.supportedExerciseEvents , чтобы проверить, какие события упражнения поддерживаются для данного упражнения. Убедившись, что конкретное ExerciseEvent поддерживается, вам также следует запросить возможности события упражнения с помощью getExerciseEventCapabilityDetails .

В следующем примере показано, как запросить возможности, чтобы подтвердить поддержку GOLF_SHOT_EVENT , а затем убедиться, что GOLF_SHOT_EVENT поддерживает классификацию типа Swing.

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!")
        }
      }
    }
  }
}