0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Wear OS 搭載スマートウォッチで心拍数を表示する

Last updated at Posted at 2024-01-24

はじめに

Wear OS 搭載スマートウォッチに心拍数を表示したい。その方法を調べた

方法

調べたところ、以下の3つの方法があるもよう

  • Google Fit API
    2024年末でサポート終了とのこと

  • Health Services
    Google Fit API に代わる方法で Google は今後これを推していきたいように見える

  • センサー利用

今回は Health Services を利用して心拍数を表示してみる

実装

ライブラリ追加

build.gradle.kts
  implementation "androidx.health:health-services-client:1.1.0-alpha02"

まだ alpha 版のもよう

権限追加

AndroidManifest.xml
    <uses-permission android:name="android.permission.BODY_SENSORS" />

権限取得処理

実行時に android.Manifest.permission.BODY_SENSORS の権限取得処理必要
(実装例略)

HealthServiceClient 取得

    private val healthClient: HealthServicesClient by lazy { HealthServices.getClient(getApplication()) }

コールバック処理実装

    private val heartRateCallback = object : MeasureCallback {
        override fun onAvailabilityChanged(dataType: DeltaDataType<*, *>, availability: Availability) {
            if (availability is DataTypeAvailability) {
                Timber.d("dataType: $dataType, availability: $availability")
            }
        }

        override fun onDataReceived(data: DataPointContainer) {
            val heartRate: Double = (data.sampleDataPoints.firstOrNull()?.value as Double?) ?: 0.0
            // ここで取得した心拍数を利用!!
            Timber.d("heart rate: $heartRate")
        }

        override fun onRegistered() {
            super.onRegistered()
            Timber.d("onRegistered()")
        }

        override fun onRegistrationFailed(throwable: Throwable) {
            super.onRegistrationFailed(throwable)
            Timber.d("onRegistrationFailed throwable: $throwable")
        }
    }

コールバック登録/解除

    // 登録
    healthClient.measureClient.registerMeasureCallback(DataType.Companion.HEART_RATE_BPM, heartRateCallback)

    ...
            
    // 解除
    healthClient.measureClient.unregisterMeasureCallbackAsync(DataType.Companion.HEART_RATE_BPM, heartRateCallback)

実際はコールバック登録時に android.Manifest.permission.BODY_SENSORS の権限チェック&権限取得処理が必要

実行

Pixel Watch を腕に身に付けてアプリを起動したら、心拍数が表示された :ok_woman:

drawing

割と頻繁に(数秒毎に)数値が更新されて良い感じ :tada:

注意

  • Health Services は Wear OS 3(SdkVersion 30)以上でのみのサポートのもよう

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?