Trainingsereignisse verarbeiten

Health Services unterstützt ExerciseEvents, mit denen Ihre App benachrichtigt wird, wenn während eines Trainings ein Ereignis aufgetreten ist, und die zugehörigen Metadaten bereitgestellt werden.

Abhängigkeiten hinzufügen

Für die Verwendung von Trainingsereignissen ist die aktuelle Version des Health Services SDK erforderlich.

Wenn Sie eine Abhängigkeit von Health Services hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Fügen Sie dann in der Datei build.gradle auf Modulebene die folgende Abhängigkeit hinzu:

Groovy

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

Kotlin

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

Funktionen prüfen

Wie bei allen Trainings und Datentypen in Health Services sollten Sie die Funktionen beim Start prüfen. Für ExerciseEvents müssen Sie zusätzlich zur Anfrage von ExerciseCapabilitiesExerciseTypeCapabilities.supportedExerciseEvents verwenden, um zu prüfen, welche Trainingsereignisse für das jeweilige Training unterstützt werden. Nachdem du bestätigt hast, dass die jeweilige ExerciseEvent unterstützt wird, solltest du auch die Funktionen des Trainingsereignisses mit getExerciseEventCapabilityDetails abfragen.

Das folgende Beispiel zeigt, wie Sie Funktionen abfragen, um zu bestätigen, dass GOLF_SHOT_EVENT unterstützt wird, und dann bestätigen, dass GOLF_SHOT_EVENT die Klassifizierung von Schwungtypen unterstützt.

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
}

Trainingsereignisse in einem Training anfordern

Wenn Sie das Training starten und ein Trainingsereignis als Teil des Trainings anfordern möchten, deklarieren Sie die ExerciseConfig für das Training und fügen Sie ein Feld für exerciseEventType hinzu.

Im folgenden Beispiel wird GOLF_SHOT_EVENT im Rahmen einer GOLF-Übung angefordert:

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

Für Updates zu Trainingsveranstaltungen registrieren

Du kannst ExerciseEvent-Updates im Rahmen der vorhandenen Infrastruktur deiner App für den Empfang von Trainingsupdates erhalten. Das folgende Beispiel zeigt, wie Sie Unterstützung für GolfShotEvent-Updates einbauen:

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