Dieser Leitfaden ist mit der Health Connect-Version 1.1.0-alpha12 kompatibel.
Health Connect bietet den Datentyp Hauttemperatur zur Messung der peripheren Körpertemperatur. Diese Messung ist ein besonders nützliches Signal für die Schlafqualität, die reproduktive Gesundheit und den potenziellen Ausbruch von Krankheiten.
Erforderliche Berechtigungen
Wie bei allen Datentypen in Health Connect ist der Zugriff auf die Hauttemperatur durch zwei Berechtigungen geschützt: READ_SKIN_TEMPERATURE
und WRITE_SKIN_TEMPERATURE
.
Berechtigungen vom Nutzer anfordern
Nachdem Sie eine Clientinstanz erstellt haben, muss Ihre App vom Nutzer Berechtigungen anfordern. Nutzer müssen jederzeit Berechtigungen erteilen oder verweigern können.
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. Andernfalls kannst du mit createRequestPermissionResultContract
diese Berechtigungen anfordern. Daraufhin 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 gewähren oder widerrufen können, muss Ihre App regelmäßig nach erteilten Berechtigungen suchen und mit Szenarien umgehen, in denen die Berechtigung verloren geht.
In einem Hauttemperatur-Eintrag enthaltene Informationen
Die Hauttemperaturmessungen sind in Einträgen organisiert. Jeder Eintrag besteht aus den folgenden Informationen:
- Grundlagetemperatur 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 anzeigen. Wenn die Baseline-Temperatur angegeben ist, sollten für diese Deltas dieselben Temperatureinheiten verwendet werden.
- Die Stelle am Körper des Nutzers, an der die Messung durchgeführt wurde: Finger, Zeh oder Handgelenk.
Unterstützte Aggregationen
Mit Health Connect können Sie die folgenden Gesamtwerte für eine bestimmte Liste von Deltas abrufen:
- Mindestwert
- Maximalwert
- Durchschnittlicher Wert
Hauttemperatur lesen
Das folgende Code-Snippet zeigt, wie Sie Messungen der Hauttemperatur mit der Jetpack-Bibliothek lesen:
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 Sie mit der Jetpack-Bibliothek Messungen der Hauttemperatur aufzeichnen:
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)
),
)
)
)
}