エクササイズ イベントを処理する

ヘルスサービスは、ExerciseEvents をサポートしています。これは、エクササイズ中のイベント発生時にアプリに通知し、関連メタデータを供給するものです。

依存関係を追加する

エクササイズ イベントを使用するには、最新バージョンのヘルスサービス SDK が必要です。

ヘルスサービスへの依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳細については、Google の Maven リポジトリをご覧ください。

次に、モジュール レベルの build.gradle ファイルで、次の依存関係を追加します。

Groovy

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

Kotlin

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

機能を確認する

ヘルスサービス内のすべてのエクササイズおよびデータ型と同様に、起動時に機能を確認します。特に 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!")
        }
      }
    }
  }
}