Wenn Sie eine App entwickeln möchten, mit der Nutzer ihre Vitalparameter verwalten können, können Sie mit Health Connect Folgendes tun:
- Vitalparameter wie Blutdruck, Herzfrequenz und Körpertemperatur aus anderen Apps lesen
- Vitalparameter schreiben, die von Ihrer App oder verbundenen Geräten erfasst wurden
- Trends beobachten und anhand von Vitalparametern Gesundheitsinformationen bereitstellen
In dieser Anleitung wird beschrieben, wie Sie mit Datentypen für Vitalparameter arbeiten. Dabei werden Berechtigungen, Lese- und Schreibvorgänge sowie Best Practices behandelt.
Übersicht: Umfassende Erfassung von Vitalparametern
Mit Health Connect können Sie eine umfassende Erfassung von Vitalparametern erstellen. Dazu müssen Sie die folgenden Schritte ausführen:
- Die entsprechenden Berechtigungen für Datentypen für Vitalparameter anfordern.
- Vitalparameter mit Datensätzen wie
BloodPressureRecord,HeartRateRecordund anderen Datensätzen für Vitalparameter schreiben. - Vitalparameter zur Anzeige, Analyse oder Synchronisierung lesen.
- Batching für effizientes Schreiben und Lesen von Daten verwenden.
Dieser Workflow ermöglicht die Interoperabilität mit anderen Health Connect-Apps und überprüft den nutzergesteuerten Datenzugriff.
Hinweis
Vor der Implementierung von Funktionen für Vitalparameter:
- Health Connect mit der entsprechenden Abhängigkeit einbinden.
- Eine
HealthConnectClient-Instanz erstellen. - Prüfen, ob Ihre App Laufzeit berechtigungen basierend auf Health-Berechtigungen implementiert.
Wichtige Konzepte
Vitalparameter in Health Connect werden durch verschiedene Datensatztypen dargestellt, die jeweils einer bestimmten physiologischen Messung entsprechen. Im Gegensatz zu Trainingseinheiten werden Vitalparameter oft als Daten zu einem bestimmten Zeitpunkt oder als intervallbasierte Daten erfasst.
Datentypen für Vitalparameter
Vitalparameter werden durch einzelne Datensatztypen dargestellt. Häufige Typen sind
BloodPressureRecord: Stellt eine einzelne Blutdruckmessung dar, einschließlich systolischem und diastolischem Blutdruck sowie Körperposition.HeartRateRecord: Stellt eine Reihe von Herzfrequenzmessungen dar.RestingHeartRateRecord: Stellt eine einzelne Messung der Ruheherzfrequenz dar.BodyTemperatureRecord: Stellt eine einzelne Körpertemperaturmessung dar, einschließlich Messort.BloodGlucoseRecord: Stellt eine einzelne Blutzuckermessung dar, einschließlich Beziehung zur Mahlzeit und Probenquelle.OxygenSaturationRecord: Stellt eine einzelne Messung der Sauerstoffsättigung dar.RespiratoryRateRecord: Stellt eine einzelne Messung der Atemfrequenz dar.
Eine vollständige Liste der Datentypen finden Sie unter Health Connect-Datentypen.
Überlegungen zur Entwicklung
Vitalparameter können sensibel sein. Apps müssen möglicherweise Daten als Reaktion auf Messungen von Sensoren oder Nutzereingaben schreiben oder Daten aus einem Backend synchronisieren. Berechtigungen sind für die Verarbeitung von Vitalparametern von entscheidender Bedeutung.
Berechtigungen
Ihre App muss die entsprechenden Health Connect-Berechtigungen anfordern, bevor sie Vitalparameter lesen oder schreiben kann. Häufige Berechtigungen für Vitalparameter sind Blutdruck, Herzfrequenz, Körpertemperatur, Blutzucker, Sauerstoffsättigung und Atemfrequenz. Das bedeutet:
- Blutdruck: Lese- und Schreibberechtigungen für
BloodPressureRecord. - Herzfrequenz: Lese- und Schreibberechtigungen für
HeartRateRecord. - Ruheherzfrequenz: Lese- und Schreibberechtigungen für
RestingHeartRateRecord. - Körpertemperatur: Lese- und Schreibberechtigungen für
BodyTemperatureRecord. - Blutzucker: Lese- und Schreibberechtigungen für
BloodGlucoseRecord. - Sauerstoffsättigung: Lese- und Schreibberechtigungen für
OxygenSaturationRecord. - Atemfrequenz: Lese- und Schreibberechtigungen für
RespiratoryRateRecord.
Im Folgenden sehen Sie ein Beispiel dafür, wie Sie Berechtigungen für Blutdruck, Herzfrequenz und Körpertemperatur anfordern:
Nachdem Sie eine Client-Instanz erstellt haben, muss Ihre App Berechtigungen vom Nutzer anfordern. Nutzer müssen Berechtigungen jederzeit 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.
val permissions = setOf( HealthPermission.getReadPermission(BloodPressureRecord::class), HealthPermission.getWritePermission(BloodPressureRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class), HealthPermission.getReadPermission(BodyTemperatureRecord::class), HealthPermission.getWritePermission(BodyTemperatureRecord::class) )
getGrantedPermissions
können Sie prüfen, ob Ihrer App bereits die erforderlichen Berechtigungen erteilt wurden. Wenn nicht, fordern Sie diese Berechtigungen mit
createRequestPermissionResultContract
an. Daraufhin wird der Health Connect-Berechtigungsbildschirm angezeigt.
val permissions = setOf( HealthPermission.getReadPermission(StepsRecord::class), HealthPermission.getWritePermission(StepsRecord::class), HealthPermission.getReadPermission(HeartRateRecord::class), HealthPermission.getWritePermission(HeartRateRecord::class) ) val requestPermissionsLauncher = rememberLauncherForActivityResult( contract = PermissionController.createRequestPermissionResultContract() ) { grantedPermissions -> if (grantedPermissions.containsAll(permissions)) { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions granted!") } } else { coroutineScope.launch { snackbarHostState.showSnackbar("Permissions denied.") } } }
Rufen Sie die Funktion checkPermissionsAndRun auf, um Berechtigungen anzufordern:
if (!granted.containsAll(permissions)) { // Check if required permissions are not granted, and return return emptySet() } // Permissions already granted; proceed with inserting or reading data
Wenn Sie nur Berechtigungen für einen einzelnen Datentyp wie Blutdruck anfordern müssen, fügen Sie nur diesen Datentyp in Ihr Berechtigungssatz ein:
Der Zugriff auf den Blutdruck wird durch die folgenden Berechtigungen geschützt:
android.permission.health.READ_BLOOD_PRESSUREandroid.permission.health.WRITE_BLOOD_PRESSURE
Wenn Sie Ihrer App die Möglichkeit geben möchten, den Blutdruck zu erfassen, fordern Sie zuerst Berechtigungen für den Datentyp BloodPressureRecord an.
Hier ist die Berechtigung, die Sie deklarieren müssen, um den Blutdruck schreiben zu können:
<application>
<uses-permission
android:name="android.permission.health.WRITE_BLOOD_PRESSURE" />
...
</application>
Wenn Sie den Blutdruck lesen möchten, müssen Sie die folgenden Berechtigungen anfordern:
<application>
<uses-permission
android:name="android.permission.health.READ_BLOOD_PRESSURE" />
...
</application>
Vitalparameter schreiben
In diesem Abschnitt wird beschrieben, wie Sie Vitalparameter in Health Connect schreiben. Vitalparameter werden in der Regel als einzelne Datensätze geschrieben. Wenn Sie mehrere Datensätze gleichzeitig schreiben, z. B. bei der Synchronisierung von einem Sensor oder Backend, verwenden Sie Batching.
Beispiel für das Schreiben eines BloodPressureRecord:
suspend fun writeBloodPressureRecord(healthConnectClient: HealthConnectClient) { val record = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) healthConnectClient.insertRecords(listOf(record)) }
Batchschreibvorgänge
Wenn Ihre App mehrere Datenpunkte schreiben muss, z. B. beim Synchronisieren von Daten von einem verbundenen Gerät oder einem Backend-Dienst, sollten Sie Batchschreibvorgänge verwenden, um die Effizienz zu verbessern und den Akkuverbrauch zu senken. Health Connect kann bis zu 1.000 Datensätze in einer einzelnen Schreibanfrage verarbeiten.
Der folgende Code zeigt, wie Sie mehrere Datensätze gleichzeitig schreiben:
suspend fun writeBatchRecords(healthConnectClient: HealthConnectClient) { val bloodPressureRecord = BloodPressureRecord( time = Instant.now(), zoneOffset = ZoneOffset.UTC, systolic = Pressure.millimetersOfMercury(120.0), diastolic = Pressure.millimetersOfMercury(80.0), bodyPosition = BloodPressureRecord.BODY_POSITION_SITTING_DOWN, measurementLocation = BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST ) val heartRateRecord = HeartRateRecord( startTime = Instant.now().minusSeconds(60), startZoneOffset = ZoneOffset.UTC, endTime = Instant.now(), endZoneOffset = ZoneOffset.UTC, samples = listOf(HeartRateRecord.Sample(time = Instant.now().minusSeconds(30), beatsPerMinute = 80)) ) healthConnectClient.insertRecords(listOf(bloodPressureRecord, heartRateRecord)) }
Vitalparameter lesen
Apps können Vitalparameter lesen, um Messungen anzuzeigen, Trends zu analysieren oder Daten mit einem externen Server zu synchronisieren. Verwenden Sie zum Lesen von Vitalparametern eine ReadRecordsRequest mit dem spezifischen Datensatztyp und filtern Sie nach einem Zeitraum.
Beispiel für das Lesen von BloodPressureRecord-Daten:
suspend fun readBloodPressureRecords( healthConnectClient: HealthConnectClient, startTime: Instant, endTime: Instant ) { val response = healthConnectClient.readRecords( ReadRecordsRequest( recordType = BloodPressureRecord::class, timeRangeFilter = TimeRangeFilter.between(startTime, endTime) ) ) for (record in response.records) { // Process each blood pressure record val systolic = record.systolic val diastolic = record.diastolic } }
Wenn Sie Vitalparameter mit einem Backend-Server synchronisieren oder den Datenspeicher Ihrer App mit Health Connect auf dem neuesten Stand halten möchten, verwenden Sie ChangeLogs. So können Sie eine Liste der seit einem bestimmten Zeitpunkt eingefügten, aktualisierten oder gelöschten Datensätze abrufen. Das ist effizienter als Änderungen manuell zu verfolgen oder alle Daten wiederholt zu lesen. Weitere Informationen finden Sie unter Daten mit Health Connect synchronisieren.
Best Practices
Beachten Sie diese Richtlinien, um die Zuverlässigkeit der Daten und die Nutzerfreundlichkeit zu verbessern:
- Batchschreibanfragen: Um den E/A-Aufwand zu reduzieren und die Akkulaufzeit zu verlängern, gruppieren Sie Datenpunkte in einem einzelnen
insertRecordsAufruf mit Batches von bis zu 1.000 Datensätzen, anstatt jeden Punkt einzeln zu schreiben. - Häufig schreiben bei der Live-Erfassung: Bei häufigen Aktualisierungen von Sensoren (z. B. kontinuierliche Glukosemessgeräte oder Herzfrequenzmesser) sollten Sie Daten in Batches in Intervallen von bis zu 15 Minuten schreiben, um Echtzeitaktualisierungen mit der Akkueffizienz in Einklang zu bringen.
- WorkManager für Hintergrundsynchronisierungen verwenden: Verwenden Sie
WorkManagerfür verzögerte Schreibvorgänge, z. B. zum Synchronisieren von Daten von einem Begleitgerät oder einem Backend-Dienst. Ein Intervall von 15 Minuten für Batchschreibvorgänge ist empfehlenswert. - Doppelte Daten vermeiden: Client-IDs verwenden: Legen Sie beim Erstellen von Datensätzen eine
metadata.clientRecordIdfest. Health Connect verwendet diese ID, um eindeutige Datensätze zu identifizieren. Wenn Sie versuchen, einen Datensatz mit einer bereits vorhandenenclientRecordIdzu schreiben, ignoriert Health Connect das Duplikat oder aktualisiert den vorhandenen Datensatz, anstatt einen neuen zu erstellen. Das Festlegen einermetadata.clientRecordIdist die effektivste Methode, um Duplikate bei Synchronisierungsversuchen oder Neuinstallationen der App zu vermeiden.val record = StepsRecord( count = 100, startTime = startTime, endTime = endTime, startZoneOffset = ZoneOffset.UTC, endZoneOffset = ZoneOffset.UTC, metadata = Metadata( // Use a unique ID from your own database clientRecordId = "daily_steps_2023_10_27_user_123" ) )
- Vorhandene Daten prüfen: Bevor Sie Daten synchronisieren, fragen Sie Health Connect nach Datensätzen im Synchronisierungszeitraum ab, um zu prüfen, ob bereits Daten aus Ihrer App vorhanden sind. So vermeiden Sie Duplikate oder das Überschreiben neuerer Daten.
- Klare Begründungen für Berechtigungen angeben: Verwenden Sie den
Permission.createIntent-Ablauf, um zu erklären, warum Ihre App Zugriff auf Gesundheitsdaten benötigt, z. B. „Um Ihre Blutdrucktrends zu beobachten und Informationen bereitzustellen“. - Zeitstempel mit Messungen abstimmen: Prüfen Sie, ob die Zeitstempel der Datensätze genau angeben, wann die Messungen vorgenommen wurden. Bei Intervall-Daten wie
HeartRateRecordmüssenstartTimeundendTimekorrekt sein.
Test
Um die Richtigkeit der Daten und eine hohe Nutzerfreundlichkeit zu gewährleisten, folgen Sie diesen Teststrategien und lesen Sie die offizielle Dokumentation zu Test-Anwendungsfällen.
Überprüfungstools
- **Health Connect Toolbox**: Mit dieser Begleit-App können Sie Datensätze manuell prüfen , Testdaten löschen und Änderungen an der Datenbank simulieren. So lässt sich am besten prüfen, ob Ihre Datensätze korrekt gespeichert werden.
- Unittests mit
FakeHealthConnectClient: Mit der Testbibliothek können Sie prüfen, wie Ihre App Grenzfälle wie den Widerruf von Berechtigungen oder API Ausnahmen behandelt, ohne dass ein physisches Gerät erforderlich ist.
Checkliste für Qualität
Typische Architektur
Eine Implementierung von Vitalparametern umfasst in der Regel Folgendes:
| Komponente | Verwaltet |
|---|---|
| Controller für Vitalparameter | Sensor-/Eingabewerte lesen Batching-Logik |
| Repository-Ebene (umfasst Health Connect-Vorgänge): | Datensätze für Vitalparameter einfügen Datensätze für Vitalparameter lesen |
| UI-Ebene (Anzeige): | Live-Messungen Verlaufsdaten Diagramme und Trends |
Fehlerbehebung
| Symptom | Mögliche Ursache | Auflösung |
|---|---|---|
| Fehlende Datentypen (z. B. Blutdruck) | Fehlende Schreibberechtigungen oder falsche Zeitfilter. | Prüfen Sie, ob Sie die Berechtigung für den spezifischen Datentyp angefordert haben und ob der Nutzer sie erteilt hat. Prüfen Sie, ob Ihre ReadRecordsRequest einen TimeRangeFilter verwendet, der den Zeitpunkt der Messung abdeckt. Weitere Informationen finden Sie unter Berechtigungen. |
| Doppelte Datensätze werden angezeigt | clientRecordId fehlt. |
Weisen Sie jedem Datensatz in den Metadata eine eindeutige clientRecordId zu. So kann Health Connect Duplikate entfernen, wenn dieselben Daten bei einem Synchronisierungsversuch zweimal geschrieben werden. Weitere Informationen finden Sie unter Best Practices. |
| Datensätze können nicht geschrieben werden | Falsche Einheiten oder Werte außerhalb des gültigen Bereichs. | Health Connect validiert Datensatzwerte. Beispielsweise müssen die Blutdruckwerte in einem physiologisch plausiblen Bereich liegen. Informationen zu gültigen Bereichen und Einheiten finden Sie in der Dokumentation zu Datentypen. |
Häufige Schritte zur Fehlerbehebung
| Berechtigungsstatus prüfen. | Rufen Sie immer getPermissionStatus() auf, bevor Sie einen Lese- oder Schreibvorgang ausführen. Nutzer können Berechtigungen jederzeit in den Systemeinstellungen widerrufen. |