Wenn Sie eine App entwickeln möchten, mit der Nutzer ihre Vitalparameter verwalten können, können Sie mit Health Connect folgende Aktionen ausführen:
- 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. Führen Sie dazu die folgenden Schritte aus:
- Fordern Sie die entsprechenden Berechtigungen für Datentypen für Vitalparameter an.
- Schreiben Sie Vitalparameter mithilfe von Datensätzen wie
BloodPressureRecord,HeartRateRecordund anderen Datensätzen für Vitalparameter. - Lesen Sie Vitalparameter, um sie anzuzeigen, zu analysieren oder zu synchronisieren.
- Verwenden Sie Batching für effizientes Schreiben und Lesen von Daten.
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:
- Integrieren Sie Health Connect mit der entsprechenden Abhängigkeit.
- Erstellen Sie eine
HealthConnectClient-Instanz. - Prüfen Sie, ob Ihre App Abläufe für Laufzeit berechtigungen 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. Zu den gängigen Typen gehören:
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 des Messorts.BloodGlucoseRecord: Stellt eine einzelne Blutzuckermessung dar, einschließlich der Beziehung zur Mahlzeit und der Probenquelle.OxygenSaturationRecord: Stellt eine einzelne Messung der Sauerstoffsättigung im Blut 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. Zu den gängigen Berechtigungen für Vitalparameter gehören 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 Clientinstanz 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 eingefügten, aktualisierten oder gelöschten Datensätze seit einem bestimmten Zeitpunkt 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:
- Batchschreibanfragen: Um den Input/Output-Overhead zu reduzieren und die Akkulaufzeit zu verlängern, gruppieren Sie Datenpunkte in einem einzelnen
insertRecords-Aufruf 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) schreiben Sie Daten in Batches in Intervallen von bis zu 15 Minuten, 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 Backend-Dienst. Streben Sie ein 15-Minuten-Intervall für Batchschreibvorgänge an. - 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 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, 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.createIntentAblauf, 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. Prüfen Sie bei Intervalldaten wie
HeartRateRecord, obstartTimeundendTimekorrekt sind.
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 (umfasst Health Connect-Vorgänge): | Datensätze für Vitalparameter einfügen Datensätze für Vitalparameter lesen |
| UI-Ebene (Anzeige): | Live-Messwerte 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 in Ihrer ReadRecordsRequest ein TimeRangeFilter verwendet wird, 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 ausführen. Nutzer können Berechtigungen jederzeit in den Systemeinstellungen widerrufen. |