Aggregierte Daten lesen

Das Aggregieren von Daten in Health Connect umfasst grundlegende Aggregationen Daten in Buckets zu gliedern. Die folgenden Workflows zeigen, wie Sie beides tun können.

Einfache Aggregation

Verwenden Sie die Funktion aggregate, um eine grundlegende Aggregation Ihrer Daten zu verwenden für das HealthConnectClient-Objekt. Sie akzeptiert ein Objekt AggregateRequest, dem Sie die Messwerttypen hinzufügen und den Zeitraum als Parameter. Wie einfache Aggregatfunktionen aufgerufen werden, hängt davon ab, die verwendeten Messwerttypen.

Kumulative Aggregation

Bei der kumulativen Aggregation wird der Gesamtwert berechnet.

Das folgende Beispiel zeigt, wie Sie Daten für einen Datentyp aggregieren:

suspend fun aggregateDistance(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response = healthConnectClient.aggregate(
            AggregateRequest(
                metrics = setOf(DistanceRecord.DISTANCE_TOTAL),
                timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
            )
        )
        // The result may be null if no data is available in the time range
        val distanceTotalInMeters = response[DistanceRecord.DISTANCE_TOTAL]?.inMeters ?: 0L
    } catch (e: Exception) {
        // Run error handling here
    }
}

Statistische Aggregation

Die statistische Aggregation berechnet die Mindest-, Höchst- oder Durchschnittswerte von mit Stichproben.

Das folgende Beispiel zeigt, wie die statistische Aggregation verwendet wird:

suspend fun aggregateHeartRate(
    healthConnectClient: HealthConnectClient,
    startTime: Instant,
    endTime: Instant
) {
    try {
        val response =
            healthConnectClient.aggregate(
                AggregateRequest(
                    setOf(HeartRateRecord.BPM_MAX, HeartRateRecord.BPM_MIN),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
                )
            )
        // The result may be null if no data is available in the time range
        val minimumHeartRate = response[HeartRateRecord.BPM_MIN]
        val maximumHeartRate = response[HeartRateRecord.BPM_MAX]
    } catch (e: Exception) {
        // Run error handling here
    }
}

Eimer

Mit Health Connect können Sie Daten auch in Buckets aggregieren. Die zwei Arten von Zu den Buckets, die Sie verwenden können, gehören duration und period.

Nach dem Aufruf wird eine Liste von Buckets zurückgegeben. Die Liste kann dünnbesetzt sein, Ein Bucket ist nicht in der Liste enthalten, wenn er keine Daten enthält.

Dauer

In diesem Fall werden aggregierte Daten innerhalb einer festen Länge wie etwa eine Minute oder eine Stunde. Um Daten in Buckets zusammenzufassen, verwenden Sie aggregateGroupByDuration Sie akzeptiert ein Objekt AggregateGroupByDurationRequest, in das Sie den Parameter Messwerttypen, den Zeitraum und Duration als Parameter verwenden.

Das folgende Beispiel zeigt das Aggregieren von Schritten in minutenlangen Buckets:

suspend fun aggregateStepsIntoMinutes(
    healthConnectClient: HealthConnectClient,
    startTime: LocalDateTime,
    endTime: LocalDateTime
) {
    try {
        val response =
            healthConnectClient.aggregateGroupByDuration(
                AggregateGroupByDurationRequest(
                    metrics = setOf(StepsRecord.COUNT_TOTAL),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                    timeRangeSlicer = Duration.ofMinutes(1L)
                )
            )
        for (durationResult in response) {
            // The result may be null if no data is available in the time range
            val totalSteps = durationResult.result[StepsRecord.COUNT_TOTAL]
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

Punkt

In diesem Fall werden aggregierte Daten innerhalb eines datumsbasierten Betrags in Buckets aufgeteilt etwa eine Woche oder einen Monat. Um Daten in Buckets zusammenzufassen, verwenden Sie aggregateGroupByPeriod Sie akzeptiert ein Objekt AggregateGroupByPeriodRequest, in das Sie den Parameter Messwerttypen, den Zeitraum und Period als Parameter verwenden.

Das folgende Beispiel zeigt das Aggregieren von Schritten in monatlichen Buckets:

suspend fun aggregateStepsIntoMonths(
    healthConnectClient: HealthConnectClient,
    startTime: LocalDateTime,
    endTime: LocalDateTime
) {
    try {
        val response =
            healthConnectClient.aggregateGroupByPeriod(
                AggregateGroupByPeriodRequest(
                    metrics = setOf(StepsRecord.COUNT_TOTAL),
                    timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
                    timeRangeSlicer = Period.ofMonths(1)
                )
            )
        for (monthlyResult in response) {
            // The result may be null if no data is available in the time range
            val totalSteps = monthlyResult.result[StepsRecord.COUNT_TOTAL]
        }
    } catch (e: Exception) {
        // Run error handling here
    }
}

Lesebeschränkung für 30 Tage

Apps können Daten aus Health Connect bis zu 30 Tage vor dem Zeitpunkt lesen, eine beliebige Berechtigung erteilt wurde.

Löscht ein Nutzer Ihre App jedoch, geht der Berechtigungsverlauf verloren. Wenn der Nutzer deine App neu installiert und die Berechtigung erneut erteilt, kann deine App Daten von Health Connect bis zu 30 Tage vor dem neuen Datum.

Beispiel

Wenn ein Nutzer Ihrer App die Leseberechtigung am 30. März 2023 erstmals erteilt hat, Die frühesten Daten, die deine App abrufen könnte, wären ab dem 28. Februar 2023 ab.

Der Nutzer löscht Ihre App dann am 10. Mai 2023. Der Nutzer beschließt, das Programm neu zu installieren. und Leseberechtigung erteilen. Das früheste Datum, ab dem Ihre App jetzt Zugriff hat gelesene Daten vom 15. April 2023.