Processar eventos de exercício

Os Recursos de saúde oferecem suporte a ExerciseEvents, que notificam o app quando ocorre um evento durante um exercício e fornecem os metadados associados a essa ação.

Adicionar dependências

O uso de eventos de exercícios requer a versão mais recente do SDK dos Recursos de saúde.

Para adicionar uma dependência aos Recursos de saúde, é preciso adicionar o repositório Maven do Google ao seu projeto. Para mais informações, consulte a seção Repositório Maven do Google.

Em seguida, no arquivo build.gradle do módulo, adicione a dependência abaixo:

Groovy

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

Kotlin

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

Verificar as capabilities

Assim como em todos os exercícios e tipos de dados nos Recursos de saúde, confira as capabilities na inicialização. Para ExerciseEvents, além de solicitar ExerciseCapabilities, use ExerciseTypeCapabilities.supportedExerciseEvents para verificar quais eventos de exercício têm suporte ao exercício em questão. Depois de confirmar que o ExerciseEvent específico tem suporte, consulte também as capabilities do evento de exercício usando getExerciseEventCapabilityDetails.

O exemplo abaixo mostra como consultar capabilities para confirmar se o GOLF_SHOT_EVENT tem suporte e se o GOLF_SHOT_EVENT oferece suporte à classificação do tipo de 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
}

Solicitar eventos de exercício durante um exercício

Para iniciar o exercício e solicitar um evento de exercício como parte dele, declare a ExerciseConfig para o exercício e adicione um campo para o exerciseEventType.

O exemplo abaixo solicita GOLF_SHOT_EVENT como parte de um exercício GOLF:

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

Receber atualizações de eventos de exercício

É possível receber atualizações de ExerciseEvent como parte da infraestrutura existente do app para receber atualizações de exercícios. O exemplo abaixo mostra como incorporar o suporte a atualizações de 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!")
        }
      }
    }
  }
}