皮膚温を測定

このガイドは、Health Connect バージョン 1.1.0-alpha12 に対応しています。

ヘルスコネクトには、末端の体温を測定する皮膚温データ型が用意されています。この測定は、睡眠の質、生殖衛生、病気の発生の可能性を検出するために特に有用なシグナルです。

必要な権限

ヘルスコネクトの他のデータタイプと同様に、皮膚温へのアクセスは、READ_SKIN_TEMPERATUREWRITE_SKIN_TEMPERATURE の 2 つの権限によって保護されています。

皮膚温レコードに含まれる情報

皮膚温の測定値はレコードに整理されます。各レコードは次の情報で構成されます。

  • ベースライン温度(摂氏または華氏)。これは省略可能な値で、アプリの UI での可視化に最も役立ちます。
  • 皮膚温のデルタのリスト。それぞれに、前回の測定からの皮膚温の変化が表示されます。ベースライン温度が指定されている場合は、これらの差分には同じ温度単位を使用する必要があります。
  • 測定が行われたユーザーの身体の部位(指、つま先、手首)。

サポートされている集計

ヘルスコネクトでは、特定の差分リストについて次の集計値を取得できます。

  • 最小値
  • 最大値
  • 平均値

皮膚温を読み取る

次のコード スニペットは、Jetpack ライブラリを使用して皮膚温度測定値を読み取る方法を示しています。

suspend fun readSkinTemperatures() {
    // Error handling, permission check, and feature availability check
    // aren't included.

    // Record includes measurements during the past hour.
    val recordEndTime = Instant.now()
    val recordStartTime = recordEndTime.minusSeconds(60 * 60)

    val response = healthConnectClient.readRecords(
        ReadRecordsRequest<SkinTemperatureRecord>(
            timeRangeFilter = TimeRangeFilter.between(
                recordStartTime, recordEndTime
            )
        )
    )

    for (skinTemperatureRecord in response.records) {
        // Process each skin temperature record here.
    }
}

皮膚温を書き込む

次のコード スニペットは、Jetpack ライブラリを使用して皮膚温度の測定値を書き込成する方法を示しています。


suspend fun writeSkinTemperatures(): InsertRecordsResponse {
    // Error handling, permission check, and feature availability check
    // aren't included.

    // Record includes measurements during the past hour.
    val recordEndTime: ZonedDateTime = now()
    val recordStartTime: ZonedDateTime = recordEndTime.minusHours(1)

    healthConnectClient.insertRecords(
        // For this example, there's only one skin temperature record.
        listOf(
            SkinTemperatureRecord(
                baseline = Temperature.celsius(37.0),
                startTime = recordStartTime.toInstant(),
                startZoneOffset = recordStartTime.offset,
                endTime = recordEndTime.toInstant(),
                endZoneOffset = recordEndTime.offset,
                deltas = listOf(
                    SkinTemperatureRecord.Delta(
                        recordEndTime.minusMinutes(50).toInstant(), celsius(0.5)
                    ), SkinTemperatureRecord.Delta(
                        recordEndTime.minusMinutes(30).toInstant(), celsius(-0.7)
                    )
                ),
                measurementLocation = SkinTemperatureRecord.MEASUREMENT_LOCATION_FINGER,
                metadata = Metadata.autoRecorded(
                    device = Device(type = Device.TYPE_RING)
                ),
            )
        )
    )
}