ヘルスサービスは、ExerciseEvents
をサポートしています。これは、エクササイズ中のイベント発生時にアプリに通知し、関連メタデータを供給するものです。
依存関係を追加する
エクササイズ イベントを使用するには、最新バージョンのヘルスサービス SDK が必要です。
ヘルスサービスへの依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳細については、Google の Maven リポジトリをご覧ください。
次に、モジュール レベルの build.gradle
ファイルで、次の依存関係を追加します。
Groovy
dependencies { implementation "androidx.health:health-services-client:1.1.0-alpha04" }
Kotlin
dependencies { implementation("androidx.health:health-services-client:1.1.0-alpha04") }
機能を確認する
ヘルスサービス内のすべてのエクササイズおよびデータ型と同様に、起動時に機能を確認します。特に 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
エクササイズの一部として GOLF_SHOT_EVENT
をリクエストしています。
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!")
}
}
}
}
}