Hauttemperatur messen

Diese Anleitung ist mit Health Connect-Version 1.1.0-alpha12 kompatibel.

Health Connect bietet den Datentyp Hauttemperatur zum Messen der peripheren Körpertemperatur. Dieser Messwert ist besonders nützlich, um die Schlafqualität, die reproduktive Gesundheit und den potenziellen Beginn einer Krankheit zu erkennen.

Verfügbarkeit der Funktion

Wenn Sie prüfen möchten, ob das Gerät eines Nutzers die Hauttemperatur in Health Connect unterstützt, sehen Sie nach, ob FEATURE_SKIN_TEMPERATURE im Client verfügbar ist:

if (healthConnectClient
     .features
     .getFeatureStatus(
       HealthConnectFeatures.FEATURE_SKIN_TEMPERATURE
     ) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {

  // Feature is available
} else {
  // Feature isn't available
}

Weitere Informationen

Erforderliche Berechtigungen

Der Zugriff auf die Hauttemperatur ist durch die folgenden Berechtigungen geschützt:

  • android.permission.health.READ_SKIN_TEMPERATURE
  • android.permission.health.WRITE_SKIN_TEMPERATURE

Wenn Sie Ihrer App die Funktion zur Messung der Hauttemperatur hinzufügen möchten, müssen Sie zuerst Schreibberechtigungen für den Datentyp SkinTemperature anfordern.

Hier ist die Berechtigung, die du deklarieren musst, um die Hauttemperatur schreiben zu können:

<application>
  <uses-permission
android:name="android.permission.health.WRITE_SKIN_TEMPERATURE" />
...
</application>

Zum Lesen der Hauttemperatur müssen Sie die folgenden Berechtigungen anfordern:

<application>
  <uses-permission
android:name="android.permission.health.READ_SKIN_TEMPERATURE" />
...
</application>

Berechtigungen vom Nutzer anfordern

Nachdem Sie eine Client-Instanz erstellt haben, muss Ihre App Berechtigungen vom Nutzer anfordern. Nutzer müssen jederzeit die Möglichkeit haben, Berechtigungen zu erteilen oder zu verweigern.

Erstellen Sie dazu eine Reihe von Berechtigungen für die erforderlichen Datentypen. Achten Sie darauf, dass die Berechtigungen im Set zuerst in Ihrem Android-Manifest deklariert werden.

// Create a set of permissions for required data types
val PERMISSIONS =
    setOf(
  HealthPermission.getReadPermission(SkinTemperatureRecord::class),
  HealthPermission.getWritePermission(SkinTemperatureRecord::class)
)

Mit getGrantedPermissions können Sie prüfen, ob Ihrer App bereits die erforderlichen Berechtigungen erteilt wurden. Falls nicht, verwenden Sie createRequestPermissionResultContract, um diese Berechtigungen anzufordern. Dadurch wird der Bildschirm mit den Health Connect-Berechtigungen angezeigt.

// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()

val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
  if (granted.containsAll(PERMISSIONS)) {
    // Permissions successfully granted
  } else {
    // Lack of required permissions
  }
}

suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
  val granted = healthConnectClient.permissionController.getGrantedPermissions()
  if (granted.containsAll(PERMISSIONS)) {
    // Permissions already granted; proceed with inserting or reading data
  } else {
    requestPermissions.launch(PERMISSIONS)
  }
}

Da Nutzer Berechtigungen jederzeit erteilen oder widerrufen können, muss Ihre App regelmäßig prüfen, welche Berechtigungen erteilt wurden, und Szenarien berücksichtigen, in denen Berechtigungen verloren gehen.

In einem Eintrag zur Hauttemperatur enthaltene Informationen

Hauttemperaturmessungen werden in Aufzeichnungen organisiert. Jeder Datensatz besteht aus den folgenden Informationen:

  • Basistemperatur in Grad Celsius oder Grad Fahrenheit. Dies ist ein optionaler Wert, der sich am besten für die Visualisierung auf der Benutzeroberfläche Ihrer App eignet.
  • Eine Liste der Deltas der Hauttemperatur, die jeweils die Änderung der Hauttemperatur seit der letzten Messung zeigen. Wenn die Basistemperatur angegeben ist, sollten diese Deltas dieselben Temperatureinheiten verwenden.
  • Der Ort am Körper des Nutzers, an dem die Messung vorgenommen wurde: Finger, Zehe oder Handgelenk.

Unterstützte Aggregationen

Für diesen Datentyp sind keine unterstützten Aggregationen vorhanden.

Beispiel für die Verwendung

Hauttemperaturmessungen mit der Jetpack-Bibliothek lesen oder schreiben.

Hauttemperatur lesen

Das folgende Code-Snippet zeigt, wie du Hauttemperaturmessungen mit der Jetpack-Bibliothek lesen kannst:

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.
    }
}

Hauttemperatur schreiben

Das folgende Code-Snippet zeigt, wie du Hauttemperaturmessungen mit der Jetpack-Bibliothek schreibst:


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)
                ),
            )
        )
    )
}