Gestire gli eventi di allenamento

Health Services supporta ExerciseEvents, che inviano una notifica alla tua app quando si verifica un evento durante un allenamento e forniscono i metadati associati.

Aggiungi dipendenze

L'utilizzo degli eventi di allenamento richiede l'ultima versione dell'SDK Health Services.

Per aggiungere una dipendenza da Health Services, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.

Poi, nel file build.gradle a livello di modulo, aggiungi la seguente dipendenza:

Groovy

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

Kotlin

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

Controllare le funzionalità

Come per tutti gli esercizi e i tipi di dati in Servizi per la salute, controlla le funzionalità all'avvio. Per ExerciseEvents in particolare, oltre a richiedere ExerciseCapabilities, utilizza ExerciseTypeCapabilities.supportedExerciseEvents per verificare quali eventi di allenamento sono supportati per l'allenamento specificato. Dopo aver confermato che il ExerciseEvent specifico è supportato, devi anche eseguire una query sulle funzionalità dell'evento di allenamento utilizzando getExerciseEventCapabilityDetails.

L'esempio seguente mostra come eseguire query sulle funzionalità per verificare che GOLF_SHOT_EVENT sia supportato e poi verificare che GOLF_SHOT_EVENT supporti la classificazione del tipo di 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
}

Richiedere eventi di allenamento in un esercizio

Per avviare l'esercizio e richiedere un evento di allenamento come parte dell'esercizio, dichiara l'ExerciseConfig per l'esercizio e aggiungi un campo per exerciseEventType.

L'esempio seguente richiede GOLF_SHOT_EVENT nell'ambito di un esercizio GOLF:

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

Registrarsi per ricevere aggiornamenti sugli eventi di allenamento

Puoi ricevere aggiornamenti ExerciseEvent nell'ambito dell'infrastruttura esistente che la tua app ha per ricevere aggiornamenti sull'allenamento. Il seguente esempio mostra come incorporare il supporto per gli aggiornamenti di 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!")
        }
      }
    }
  }
}