Daten schreiben

In diesem Leitfaden wird das Schreiben oder Aktualisieren von Daten in Health Connect beschrieben.

Datenstruktur einrichten

Bevor wir Daten schreiben, müssen wir die Datensätze einrichten. Für mehr als 50 Daten haben alle ihre jeweiligen Strukturen. Weitere Informationen zu den Daten finden Sie in der Jetpack-Referenz. Typen.

Grundlegende Einträge

Mit dem Datentyp Schritte in Health Connect wird die Anzahl der Schritte zwischen den Messungen durchgeführt hat. Schrittzahlen stellen eine gängige Messung dar, auf Plattformen für Gesundheit, Fitness und Wellness.

Das folgende Beispiel zeigt, wie Daten für die Schrittzahl festgelegt werden:

val stepsRecord = StepsRecord(
    count = 120,
    startTime = START_TIME,
    endTime = END_TIME,
    startZoneOffset = START_ZONE_OFFSET,
    endZoneOffset = END_ZONE_OFFSET
)

Datensätze mit Maßeinheiten

Health Connect kann Werte zusammen mit den zugehörigen Maßeinheiten speichern, um Genauigkeit. Ein Beispiel ist der Datentyp Nutrition, umfangreich. Es umfasst eine Vielzahl optionaler Nährstofffelder mit von Kohlenhydraten bis zu Vitaminen. Jeder Datenpunkt steht für die Nährstoffe die potenziell als Teil einer Mahlzeit oder eines Lebensmittels konsumiert wurden.

In diesem Datentyp werden alle Nährstoffe in Einheiten Mass, während energy durch eine Einheit von Energy dargestellt wird.

Das folgende Beispiel zeigt, wie Ernährungsdaten für Nutzende mit eine Banane gegessen:

val banana = NutritionRecord(
    name = "banana",
    energy = 105.0.kilocalories,
    dietaryFiber = 3.1.grams,
    potassium = 0.422.grams,
    totalCarbohydrate = 27.0.grams,
    totalFat = 0.4.grams,
    saturatedFat = 0.1.grams,
    sodium = 0.001.grams,
    sugar = 14.0.grams,
    vitaminB6 = 0.0005.grams,
    vitaminC = 0.0103.grams,
    startTime = START_TIME,
    endTime = END_TIME,
    startZoneOffset = START_ZONE_OFFSET,
    endZoneOffset = END_ZONE_OFFSET
)

Datensätze mit Reihendaten

Health Connect kann eine Liste mit Daten zu Buchreihen speichern. Ein Beispiel ist die Datentyp Herzfrequenz, mit dem eine Reihe von Herzschlägen erfasst wird zwischen den Messungen erkannt werden.

In diesem Datentyp wird der Parameter samples durch eine Liste von Herzfrequenzproben. Jede Stichprobe enthält ein beatsPerMinute und einen time-Wert.

Das folgende Beispiel zeigt, wie Daten zur Herzfrequenzreihe festgelegt werden:

val heartRateRecord = HeartRateRecord(
    startTime = START_TIME,
    startZoneOffset = START_ZONE_OFFSET,
    endTime = END_TIME,
    endZoneOffset = END_ZONE_OFFSET,
    // records 10 arbitrary data, to replace with actual data
    samples = List(10) { index ->
        HeartRateRecord.Sample(
            time = START_TIME + Duration.ofSeconds(index.toLong()),
            beatsPerMinute = 100 + index.toLong(),
        )
    }
)

Daten schreiben

Einer der häufigsten Workflows in Health Connect ist das Schreiben von Daten. So fügen Sie Einträge hinzu: Verwenden Sie insertRecords.

Das folgende Beispiel zeigt, wie Daten geschrieben werden, bei denen Schrittzahlen eingefügt werden:

suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
    try {
        val stepsRecord = StepsRecord(
            count = 120,
            startTime = START_TIME,
            endTime = END_TIME,
            startZoneOffset = START_ZONE_OFFSET,
            endZoneOffset = END_ZONE_OFFSET
        )
        healthConnectClient.insertRecords(listOf(stepsRecord))
    } catch (e: Exception) {
        // Run error handling here
    }
}

Daten aktualisieren

Wenn Sie einen oder mehrere Einträge ändern müssen, Ihren App-Datenspeicher mit Daten aus Health Connect synchronisieren, können Sie Ihre Daten. Es gibt zwei Möglichkeiten, bestehende Daten zu aktualisieren. die zum Auffinden von Datensätzen verwendet wird.

Metadaten

Es lohnt sich, zuerst die Metadata-Klasse zu untersuchen, da dies erforderlich ist, wenn Daten zu aktualisieren. Beim Erstellen hat jedes Record in Health Connect ein metadata. Die folgenden Eigenschaften sind relevant für Synchronisierung:

Properties Beschreibung
id Jeder Record in Health Connect hat eine eindeutige id Wert.
Health Connect füllt dieses Feld automatisch aus beim Einfügen eines neuen Eintrags.
lastModifiedTime In jeder Record wird auch erfasst, wann die Funktion Eintrag wurde geändert.
Dies wird von Health Connect automatisch ausgefüllt.
clientRecordId Jeder Record kann eine eindeutige ID haben, die mit als Referenz in Ihrem App-Datenspeicher.
Deine App stellt diesen Wert bereit.
clientRecordVersion Wenn ein Datensatz clientRecordId enthält, wird der Mit clientRecordVersion können Daten folgende Aktionen ausführen: mit der Version in Ihrer App synchronisiert werden, datastore.
Deine App stellt diesen Wert bereit.

Über Datensatz-ID aktualisieren

Bereiten Sie zum Aktualisieren von Daten zuerst die erforderlichen Einträge vor. Nehmen Sie die gewünschten Änderungen an der bei Bedarf auf. Rufen Sie dann updateRecords auf, um die Änderungen vor.

Das folgende Beispiel zeigt, wie Daten aktualisiert werden. Zu diesem Zweck ist jeder Datensatz wird die Zonen-Offset-Werte an PST angepasst.

suspend fun updateSteps(
    healthConnectClient: HealthConnectClient,
    prevRecordStartTime: Instant,
    prevRecordEndTime: Instant
) {
    try {
        val request = healthConnectClient.readRecords(
            ReadRecordsRequest(
                recordType = StepsRecord::class,
                timeRangeFilter = TimeRangeFilter.between(
                    prevRecordStartTime,
                    prevRecordEndTime
                )
            )
        )

        val newStepsRecords = arrayListOf<StepsRecord>()
        for (record in request.records) {
            // Adjusted both offset values to reflect changes
            val sr = StepsRecord(
                count = record.count,
                startTime = record.startTime,
                startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
                endTime = record.endTime,
                endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
                metadata = record.metadata
            )
            newStepsRecords.add(sr)
        }

        client.updateRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

Upsert über Client-Eintrags-ID

Wenn Sie die optionalen Werte „Client-Eintrags-ID“ und „Client-Eintragsversion“ verwenden, empfehlen wir die Verwendung von insertRecords anstelle von updateRecords.

Mit der Funktion insertRecords kann ein Upsert von Daten ausgeführt werden. Sind die Daten in Health Connect auf der Grundlage des vorgegebenen Client-Eintrags-IDs, wird sie überschrieben. Andernfalls werden sie als neue Daten geschrieben. Dieses Szenario ist nützlich, wenn Sie Daten aus einer der folgenden Quellen synchronisieren müssen: App-Datenspeicher mit Health Connect verknüpfen.

Das folgende Beispiel zeigt, wie ein Upsert für Daten durchgeführt wird, die aus App-Datenspeicher:

suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
    val appStepsRecords = arrayListOf<StepsRecord>()
    // Pull data from app datastore
    // ...
    // Make changes to data if necessary
    // ...
    // Store data in appStepsRecords
    // ...
    var sr = StepsRecord(
        // Assign parameters for this record
        metadata = Metadata(
            clientRecordId = cid
        )
    )
    appStepsRecords.add(sr)
    // ...
    return appStepsRecords
}

suspend fun upsertSteps(
    healthConnectClient: HealthConnectClient,
    newStepsRecords: ArrayList<StepsRecord>
) {
    try {
        healthConnectClient.insertRecords(newStepsRecords)
    } catch (e: Exception) {
        // Run error handling here
    }
}

Danach können Sie diese Funktionen im Hauptthread aufrufen.

upsertSteps(healthConnectClient, pullStepsFromDatastore())

Wertprüfung in Client-Eintragsversion

Wenn Ihr Upsert-Prozess für Daten die Client-Eintragsversion, den Zustand Connect führt Vergleichsprüfungen in der clientRecordVersion durch Werte. Wenn die Version aus den eingefügten Daten höher ist als die aus den vorhandenen Daten wird, wird ein Upsert durchgeführt. Andernfalls wird der Prozess ignoriert die Änderung und der Wert bleibt gleich.

Um die Versionsverwaltung in Ihre Daten aufzunehmen, müssen Sie Metadata.clientRecordVersion mit einem Long-Wert basierend auf Ihrer Versionsverwaltung Logik.

val sr = StepsRecord(
    count = count,
    startTime = startTime,
    startZoneOffset = startZoneOffset,
    endTime = endTime,
    endZoneOffset = endZoneOffset,
    metadata = Metadata(
        clientRecordId = cid,
        clientRecordVersion = version
    )
)

Upserts erhöhen version nicht automatisch bei Änderungen. und verhindert unerwartetes Überschreiben von Daten. Dabei müssen Sie manuell einen höheren Wert ein.

Best Practices für das Schreiben von Daten

Apps dürfen nur eigene Daten in Health Connect schreiben.

Wenn Daten in deiner App aus einer anderen App importiert wurden, ob die andere App ihre eigenen Daten in Health Connect schreibt.

Es empfiehlt sich auch, eine Logik zu implementieren, die Schreibausnahmen verarbeitet, z. B. oder ein interner Systemfehler vorliegt. Sie können Ihre Backoff- und Wiederholungsstrategien in einem Jobplanungsmechanismus. Wenn Sie an eine Health Connect ist letztendlich nicht erfolgreich – achte darauf, dass deine App an diesem Punkt des Exports. Vergessen Sie nicht, Fehler zu protokollieren und zu melden, um eine Diagnose zu ermöglichen.

Beim Erfassen von Daten gibt es einige Vorschläge, je nachdem, wie Ihre App Daten schreibt.

Passives Tracking

Dazu gehören Apps, die ein passives Fitness- oder Gesundheits-Tracking durchführen, Aufzeichnung von Schritten oder Herzfrequenz kontinuierlich im Hintergrund.

Ihre App muss regelmäßig Daten in Health Connect schreiben. auf folgende Arten:

  • Bei jeder Synchronisierung nur neue Daten und aktualisierte Daten schreiben, die seit bei der letzten Synchronisierung.
  • Chunk-Anfragen für maximal 1.000 Datensätze pro Schreibanfrage.
  • Mit WorkManager können Sie regelmäßige Hintergrundaufgaben planen, mit für einen Zeitraum von mindestens 15 Minuten.
  • Aufgaben so einschränken, dass sie nur ausgeführt werden, wenn das Gerät inaktiv ist und keine niedrigen Auslastung Akku.

    val constraints = Constraints.Builder()
        .requiresBatteryNotLow()
        .requiresDeviceIdle(true)
        .build()
    
    val writeDataWork = PeriodicWorkRequestBuilder<WriteDataToHealthConnectWorker>(
            15,
            TimeUnit.MINUTES,
            5,
            TimeUnit.MINUTES
        )
        .setConstraints(constraints)
        .build()
    

Aktives Tracking

Dazu gehören Apps mit ereignisbasiertem Tracking, wie z. B. Training und Schlaf, oder manuelle Benutzereingaben wie Ernährung. Diese Einträge werden erstellt, wenn die App im Vordergrund ausgeführt wird oder in seltenen Fällen, wenn sie mehrmals am Tag verwendet wird.

Achten Sie darauf, dass Ihre App Health Connect nicht für die gesamte Dauer ausgeführt wird Dauer des Ereignisses.

Es gibt zwei Möglichkeiten, Daten in Health Connect zu schreiben:

  • Nach Abschluss der Veranstaltung kannst du die Daten mit Health Connect synchronisieren. Beispiel: Synchronisierung wenn der Nutzer eine aufgezeichnete Trainingssitzung beendet.
  • Einmalige Aufgabe mit WorkManager zur Datensynchronisierung planen .

Best Practices für Granularität und Häufigkeit von Schreibvorgängen

Verwenden Sie beim Schreiben von Daten in Health Connect die entsprechende Auflösung. Mit der angemessene Auflösung trägt dazu bei, die Speicherauslastung zu reduzieren, konsistente und präzise Daten zu erhalten. Die Datenauflösung umfasst zwei Dinge:

  1. Häufigkeit der Schreibvorgänge: Wie oft Ihre Anwendung neue Daten in einen Health Connect Schreiben Sie beispielsweise alle 15 Minuten neue Daten.
  2. Detaillierungsgrad der geschriebenen Daten: wie oft die gesendeten Daten übertragen wurden. Stichproben. Schreiben Sie beispielsweise alle 5 s Herzfrequenzproben. Nicht jeder Datentyp erfordert dieselbe Abtastrate. Die Aktualisierung der Schrittzahl bringt wenig Vorteile im Gegensatz zu einer selteneren Kadenz wie etwa alle 60 Sekunden. Bei höheren Stichprobenraten erhalten die Nutzenden jedoch Gesundheits- und Fitnessdaten genauer ansehen. Abtastratenfrequenzen ein ausgewogenes Verhältnis zwischen Detail und Leistung zu finden.

Daten schreiben, die über den Tag hinweg überwacht werden

Für fortlaufend erhobene Daten, wie z. B. Schritte, sollte Ihre Anwendung im Laufe des Tages mindestens alle 15 Minuten an Health Connect schreiben.

Datentyp

Einheit

Voraussichtliches

Beispiel

Schritte

Schritte

Jede Minute

23:14–23:15 – 5 Schritte

23:16–23:17 – 22 Schritte

23:17–23:18 – 8 Schritte

Schrittfrequenz

Schritte/min

Jede Minute

23:14–23:15 – 5 SPM

23:16–23:17 – 22 SPM

23:17–23:18 – 8 SPM

Rollstuhlanschübe

Pushes

Jede Minute

23:14–23:15 – 5 Pushes

23:16–23:17 – 22 Pushes

23:17–23:18 – 8 Pushes

Verbrannte Kalorien

Kalorien

Alle 15 Minuten

23:15–23:30 – 2 Kalorien

23:30–23:45 – 25 Kalorien

23:45 – 00:00 – 5 Kalorien

Verbrannte Kalorien insgesamt

Kalorien

Alle 15 Minuten

23:15–23:30 – 16 Kalorien

23:30–23:45 – 16 Kalorien

23:45 - 00:00 - 16 Kalorien

Strecke

km/min

Jede Minute

23:14–23:15 – 0,008 km

23:16–23:16 – 0,021 km

23:17–23:18 – 0,012 km

Bewältigte Steigung

m

Jede Minute

20:36–20:37–3,048 m

20:39–20:40–3,048 m

23:23–23:24 – 9,144 m

Etagen

Stockwerke

Jede Minute

23:14–23:15 – 5 Etagen

23:16–23:16 – 22 Etagen

23:17–23:18 – 8 Etagen

Herzfrequenz

bpm

Jede Minute

6:11 – 55 SPM

HeartRateVariabilityRmssd

ms

Jede Minute

6:11–23 ms

Atemfrequenz

Atemzüge/Minute

Jede Minute

23:14–23:15 – 60 Atemzüge/Minute

23:16–23:16 – 62 Atemzüge/Minute

23:17–23:18 – 64 Atemzüge/Minute

Sauerstoffsättigung

%

Stündlich

6:11 – 95,208%

Schreibsitzungen

Die Daten sollten am Ende des Trainings oder Schlafs in Health Connect geschrieben werden. Sitzung.

Als Best Practice sollten Schlaf- und Trainingseinheiten mit das Aufzeichnungsgerät und die entsprechenden Metadaten, RecordingMethod

Ihre Anwendung sollte mindestens den Anweisungen in den „erwarteten“ Spalte unten. Wo? sollten Sie die "besten" Anleitung.

Daten, die während eines Trainings aufgezeichnet werden

Datentyp

Einheit

Voraussichtliches

Viele Grüße

Beispiel

Schritte

Schritte

Jede Minute

Jede Sekunde

23:14-23:15 – 5 Schritte

23:16–23:17 – 22 Schritte

23:17–23:18 – 8 Schritte

Schrittfrequenz

Schritte/min

Jede Minute

Jede Sekunde

23:14–23:15 – 35 SPM

23:16–23:17–37 SPM

23:17–23:18 – 40 SPM

Rollstuhlanschübe

Pushes

Jede Minute

Jede Sekunde

23:14–23:15 – 5 Pushes

23:16–23:17 – 22 Pushes

23:17–23:18 – 8 Pushes

Radfahren/Radfahren

AZ/min

Jede Minute

Jede Sekunde

23:14–23:15 – 65 U/min

23:16–23:17 – 70 U/min

23:17–23:18 – 68 U/min

Stromversorgung

Watt

Jede Minute

Jede Sekunde

23:14–23:15 – 250 Watt

23:16–23:17 – 255 Watt

23:17–23:18 – 245 Watt

Geschwindigkeit

km/min

Jede Minute

Jede Sekunde

23:14–23:15 – 0,3 km/min

23:16–23:17 – 0,4 km/min

23:17–23:18 –0,4 km/min

Strecke

km/m

Jede Minute

Jede Sekunde

23:14–23:15 – 0,008 km

23:16–23:16 – 0,021 km

23:17–23:18 – 0,012 km

Verbrannte Kalorien

Kalorien

Jede Minute

Jede Sekunde

23:14-23:15 - 20 Kalorien

23:16–23:17 – 20 Kalorien

23:17–23:18 – 25 Kalorien

Verbrannte Kalorien insgesamt

Kalorien

Jede Minute

Jede Sekunde

23:14-23:15 - 36 Kalorien

23:16–23:17 – 36 Kalorien

23:17–23:18 – 41 Kalorien

Gewonnene Höhe

m

Jede Minute

Jede Sekunde

20:36–20:37–3,048 m

20:39–20:40–3,048 m

23:23–23:24 – 9,144 m

Trainingsrouten

Breiten- und Längengrad/Alt

Alle 3–5 Sekunden

Jede Sekunde

Herzfrequenz

bpm

Jede Minute

Jede Sekunde

23:14–23:15 – 150 SPM

23:16–23:17 –152 SPM

23:17–23:18 – 155 SPM

Daten, die während des Schlafs aufgezeichnet werden

Datentyp

Einheit

Erwartete Beispiele

Beispiel

Schlafphasen

Phase

Detaillierter Zeitraum pro Schlafphase

23:46–23:50 – wach

23:50–23:56 – leichter Schlaf

23:56–00:16 – Tiefschlaf

Ruheherzfrequenz

bpm

Einzelner Tageswert (erwartet als Erstes am Morgen)

6:11 – 60 SPM

Sauerstoffsättigung

%

Einzelner Tageswert (erwartet als Erstes am Morgen)

6:11 – 95,208%