Сервисы наблюдения за здоровьем поддерживают 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!")
}
}
}
}
}