Health Services provides support for ExerciseEvents
,
which notify your app when an event has occurred during an exercise and supply associated metadata.
Add dependencies
Using exercise events requires the latest version of the Health Services SDK.
To add a dependency on Health Services, you must add the Google Maven repository to your project. For more information, see Google's Maven repository.
Then, in your module-level build.gradle
file, add the following dependency:
Groovy
dependencies { implementation "androidx.health:health-services-client:1.1.0-alpha04" }
Kotlin
dependencies { implementation("androidx.health:health-services-client:1.1.0-alpha04") }
Check capabilities
As with all exercises and data types in Health Services, check capabilities at
startup. For
ExerciseEvents
in particular, in addition to requesting ExerciseCapabilities
,
use ExerciseTypeCapabilities.supportedExerciseEvents
to verify which exercise events are supported for the given exercise.
After confirming the particular ExerciseEvent
is supported,
you should also query the capabilities of the exercise event using
getExerciseEventCapabilityDetails
.
The following example shows how to query capabilities to confirm the
GOLF_SHOT_EVENT
is supported, and then confirm that the GOLF_SHOT_EVENT
supports Swing Type Classification.
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
}
Request exercise events in an exercise
To start the exercise and request an exercise event as part of the exercise,
declare the ExerciseConfig
for the exercise
and add a field for exerciseEventType
.
The following example requests GOLF_SHOT_EVENT
as part of a GOLF
exercise:
val config = ExerciseConfig(
exerciseType = ExerciseType.GOLF,
dataTypes = setOf(....),
// ...
exerciseEventTypes = setOf(ExerciseEventType.GOLF_SHOT_EVENT),
)
Register for exercise event updates
You can receive ExerciseEvent
updates as part of the existing infrastructure
your app has for receiving exercise updates.
The following example shows how you would incorporate support for GolfShotEvent
updates:
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!")
}
}
}
}
}