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 auf Grundlage 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 sind folgende Schritte erforderlich:
- 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 Berechtigungsabläufe zur Laufzeit basierend auf Health-Berechtigungen implementiert.
Schlüsselkonzepte
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.
// Create a set of permissions for required data types
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)
)
Mit 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.
// 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 die Berechtigungen jedes Mal prüfen, bevor sie verwendet werden, und Szenarien berücksichtigen, in denen die Berechtigung verloren geht.
Rufen Sie die Funktion checkPermissionsAndRun auf, um Berechtigungen anzufordern:
if (!granted.containsAll(PERMISSIONS)) {
requestPermissions.launch(PERMISSIONS)
// Check if required permissions are not granted, and return
}
// 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 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
Folgen Sie diesen Richtlinien, um die Zuverlässigkeit der Daten und die Nutzerfreundlichkeit zu verbessern:
- Schreibhäufigkeit und Batching: Um den E/A-Overhead zu reduzieren und
die Akkulaufzeit zu verlängern, sollten Sie Datenpunkte in einem einzelnen
insertRecordsAufruf mit Batches von bis zu 1.000 Datensätzen gruppieren, anstatt jeden Punkt einzeln zu schreiben.- Live-Tracking:Bei häufigen Updates von Sensoren (z. B. kontinuierliche Glukosemessgeräte oder Herzfrequenzmessgeräte) sollten Sie Daten in Batches in Intervallen von bis zu 15 Minuten schreiben, um Echtzeit-Updates mit der Akkueffizienz in Einklang zu bringen.
- Hintergrundsynchronisierung: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.
Duplikate 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 von Apps zu vermeiden.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, metadata = Metadata( // Use a unique ID from your own database clientRecordId = "bp_20240101_user123" ) )
Vorhandene Daten prüfen:Bevor Sie Daten synchronisieren, fragen Sie Health Connect nach Datensätzen im Synchronisierungszeitraum, 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 Intervalldaten wie
HeartRateRecordmüssenstartTimeundendTimekorrekt sein.
Testen
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 (fasst Health Connect-Vorgänge zusammen): | Datensätze für Vitalparameter einfügen Datensätze für Vitalparameter lesen |
| UI-Ebene (zeigt Folgendes an): | Live-Messungen Verlaufsdaten Diagramme und Trends |
Fehlerbehebung
| Symptom | Mögliche Ursache | Lö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. |
| Duplikate von Datensätzen 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. Blutdruckwerte müssen beispielsweise in einem physiologisch plausiblen Bereich liegen. Informationen zu gültigen Bereichen und Einheiten finden Sie in der Dokumentation zu Datentypen. |
Allgemeine Schritte zur Fehlerbehebung
| Berechtigungsstatus prüfen. | Rufen Sie immer getPermissionStatus() auf, bevor Sie einen Lese- oder Schreibvorgang versuchen. Nutzer können Berechtigungen jederzeit in den Systemeinstellungen widerrufen. |