Odczytywanie danych zbiorczych

Agregowanie danych w Health Connect obejmuje agregacje podstawowe do zasobników. Poniżej znajdziesz instrukcje, jak to zrobić.

Agregacja podstawowa

Aby użyć podstawowej agregacji danych, użyj funkcji aggregate. na obiekcie HealthConnectClient. Akceptuje ona AggregateRequest obiekt, do którego dodajesz typy danych. i zakresu czasu jako jego parametrów. Sposób wywoływania agregacji podstawowych zależy od użytych typów danych.

Agregacja skumulowana

Agregacja skumulowana oblicza łączną wartość.

Z przykładu poniżej dowiesz się, jak agregować dane określonego typu:

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
    }
}

Agregacja statystyczna

Agregacja statystyczna oblicza minimalne, maksymalne lub średnie wartości rekordy z przykładami.

Ten przykład pokazuje, jak korzystać z agregacji statystycznej:

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
    }
}

Zasobniki

Health Connect umożliwia też gromadzenie danych w grupach. Te 2 typy możesz uwzględnić atrybuty duration i period.

Po wywołaniu zwraca listę zasobników. Pamiętaj, że lista może być rozproszona, jeśli zasobnik nie zawiera żadnych danych, nie pojawi się na liście.

Czas działania

W tym przypadku dane zbiorcze są dzielone na segmenty o stałej długości , np. minuta lub godzina. Aby zebrać dane w zasobnikach, użyj funkcji aggregateGroupByDuration Akceptuje ona AggregateGroupByDurationRequest, w którym dodajesz typy danych, zakres czasu i Duration jako parametry.

Poniżej znajduje się przykład agregacji kroków do jednominutowych zasobników:

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
    }
}

Kropka

W tym przypadku dane zbiorcze są dzielone na segmenty w ilości określonej na podstawie daty. np. tydzień lub miesiąc. Aby zebrać dane w zasobnikach, użyj funkcji aggregateGroupByPeriod Akceptuje ona AggregateGroupByPeriodRequest, w którym dodajesz typy danych, zakres czasu i Period jako parametry.

Poniżej znajduje się przykład agregacji kroków do poszczególnych miesięcznych segmentów:

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
    }
}

Ograniczenie czytania przez 30 dni

Aplikacje mogą odczytywać dane z Health Connect nawet przez 30 dni przed użytkownik udzielono najpierw dowolnego pozwolenia.

Jeśli jednak użytkownik usunie Twoją aplikację, historia uprawnień zostanie utracona. Jeśli użytkownik ponownie zainstaluje Twoją aplikację i ponownie przyzna jej uprawnienia, będzie mogła odczytywać dane z Health Connect do 30 dni przed nową datą.

Przykład

Jeśli 30 marca 2023 r. użytkownik po raz pierwszy przyznał aplikacji uprawnienia do odczytu, najstarsze dane, jakie aplikacja może odczytać, pochodzą z 28 lutego 2023 roku.

Następnie użytkownik usunie Twoją aplikację 10 maja 2023 r. Użytkownik decyduje się na ponowne zainstalowanie. 15 maja 2023 r. i przyznać uprawnienia do odczytu. Najwcześniejsza możliwa data aplikacji od 15 kwietnia 2023 r.