Dieser Leitfaden ist mit Health Connect-Version 1.1.0-alpha12 kompatibel.
Health Connect bietet den Datentyp Hauttemperatur, mit dem die periphere Körpertemperatur gemessen werden kann. Dieser Messwert ist besonders nützlich, um die Schlafqualität, die reproduktive Gesundheit und den potenziellen Beginn einer Krankheit zu erkennen.
Verfügbarkeit von Health Connect prüfen
Bevor Ihre App versucht, Health Connect zu verwenden, sollte sie prüfen, ob Health Connect auf dem Gerät des Nutzers verfügbar ist. Health Connect ist möglicherweise nicht auf allen Geräten vorinstalliert oder wurde deaktiviert.
Sie können die Verfügbarkeit mit der HealthConnectClient.getSdkStatus()
-Methode prüfen.
Verfügbarkeit von Health Connect prüfen
fun checkHealthConnectAvailability(context: Context) { val providerPackageName = "com.google.android.apps.healthdata" // Or get from HealthConnectClient.DEFAULT_PROVIDER_PACKAGE_NAME val availabilityStatus = HealthConnectClient.getSdkStatus(context, providerPackageName) if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE) { // Health Connect is not available. Guide the user to install/enable it. // For example, show a dialog. return // early return as there is no viable integration } if (availabilityStatus == HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED) { // Health Connect is available but requires an update. // Optionally redirect to package installer to find a provider, for example: val uriString = "market://details?id=$providerPackageName&url=healthconnect%3A%2F%2Fonboarding" context.startActivity( Intent(Intent.ACTION_VIEW).apply { setPackage("com.android.vending") data = Uri.parse(uriString) putExtra("overlay", true) putExtra("callerId", context.packageName) } ) return } // Health Connect is available, obtain a HealthConnectClient instance val healthConnectClient = HealthConnectClient.getOrCreate(context) // Issue operations with healthConnectClient }
Je nach dem von getSdkStatus()
zurückgegebenen Status können Sie den Nutzer bei Bedarf anleiten, Health Connect aus dem Google Play Store zu installieren oder zu aktualisieren.
Verfügbarkeit der Funktion
Wenn du prüfen möchtest, ob das Gerät eines Nutzers die Hauttemperatur in Health Connect unterstützt, sieh nach, obFEATURE_SKIN_TEMPERATURE
auf dem Client verfügbar ist:
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_SKIN_TEMPERATURE
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Erforderliche Berechtigungen
Der Zugriff auf die Hauttemperatur wird 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 Sie deklarieren müssen, 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. Die Berechtigungen im Set müssen 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. Der Bildschirm mit den Health Connect-Berechtigungen wird 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
Die Messungen der Hauttemperatur 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, in der jeweils die Änderung der Hauttemperatur seit der letzten Messung angezeigt wird. Wenn die Basistemperatur angegeben ist, sollten diese Differenzen dieselben Temperatureinheiten verwenden.
- Die Körperstelle des Nutzers, an der die Messung vorgenommen wurde: Finger, Zehe oder Handgelenk.
Unterstützte Aggregationen
Für SkinTemperatureRecord
sind die folgenden aggregierten Werte verfügbar:
Beispiel
Die folgenden Code-Snippets zeigen, wie du Messungen der Hauttemperatur lesen und schreiben kannst.
Hauttemperaturaufzeichnung 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 aufzeichnen
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)
),
)
)
)
}