Birleştirilmiş verileri okuma

Health Connect'te veri toplama, temel toplama işlemlerini veya verileri gruplara toplamayı içerir. Aşağıdaki iş akışlarında her ikisini de nasıl yapacağınız gösterilmektedir.

Temel toplama

Verilerinizde temel toplama işlemi kullanmak için HealthConnectClient nesnenizde aggregate işlevini kullanın. Metrik türlerini ve zaman aralığını parametreleri olarak eklediğiniz bir AggregateRequest nesnesini kabul eder. Temel toplama işlemlerinin nasıl çağrılacağı, kullanılan metrik türlerine bağlıdır.

Kümülatif toplama

Kümülatif toplama, toplam değeri hesaplar.

Aşağıdaki örnekte, bir veri türüne ait verilerin nasıl toplanacağı gösterilmektedir:

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

İstatistiksel toplama

İstatistiksel toplama, kayıtların minimum, maksimum veya ortalama değerlerini örneklerle hesaplar.

Aşağıdaki örnekte, istatistiksel toplama işleminin nasıl kullanılacağı gösterilmektedir:

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

Kovalar

Health Connect, verileri gruplar halinde toplamanıza da olanak tanır. Kullanabileceğiniz iki grup türü süre ve dönem'dir.

Çağrıldıklarında paketlerin listesini döndürürler. Listenin seyrek olabileceğini unutmayın. Bu nedenle, veri içermeyen bir paket listeye dahil edilmez.

Süre

Bu durumda, birleştirilmiş veriler sabit bir süre (ör. bir dakika veya bir saat) içinde gruplara ayrılır. Verileri gruplandırmak için aggregateGroupByDuration işlevini kullanın. Parametre olarak metrik türlerini, zaman aralığını ve Duration değerini eklediğiniz bir AggregateGroupByDurationRequest nesnesini kabul eder.

Aşağıda, adımları dakikalık gruplar halinde toplama örneği gösterilmektedir:

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

Nokta

Bu durumda, birleştirilen veriler hafta veya ay gibi tarihe dayalı bir süre içinde gruplara ayrılır. Verileri gruplandırmak için aggregateGroupByPeriod işlevini kullanın. Parametre olarak metrik türlerini, zaman aralığını ve Period değerini eklediğiniz bir AggregateGroupByPeriodRequest nesnesini kabul eder.

Aşağıda, adımları aylık gruplar halinde toplama örneği gösterilmektedir:

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

Okundu bilgisi kısıtlamaları

Uygulamanız, varsayılan olarak verilen tüm izinlerle 30 güne kadar eski verileri okuyabilir. PERMISSION_READ_HEALTH_DATA_HISTORY izniyle uygulamanız 30 günden eski verileri okuyabilir.

30 günlük kısıtlama

Uygulamalar, ilk izin verildiği tarihten önceki 30 güne kadar Health Connect'teki verileri okuyabilir.

Ancak bir kullanıcı uygulamanızı silerse izin geçmişi kaybolur. Kullanıcı uygulamanızı yeniden yükleyip tekrar izin verirse uygulamanız, bu yeni tarihten 30 gün öncesine kadarki Health Connect verilerini okuyabilir.

30 günlük örnek

Bir kullanıcı uygulamanıza ilk kez 30 Mart 2023'te okuma izni verdiyse uygulamanızın geri okuyabileceği en eski veriler 28 Şubat 2023'ten itibaren olacaktır.

Kullanıcı daha sonra 10 Mayıs 2023'te uygulamanızı siler. Kullanıcı, 15 Mayıs 2023'te uygulamayı yeniden yüklemeye ve okuma izni vermeye karar verir. Uygulamanızın artık veri okuyabileceği en erken tarih 15 Nisan 2023'tür.

30 günden eski verileri okuma

30 günden eski verileri okumak istiyorsanız PERMISSION_READ_HEALTH_DATA_HISTORY iznini kullanmanız gerekir. Bu izin olmadan 30 günden eski tek bir kaydı okuma girişimi hatayla sonuçlanır. Ayrıca, zaman aralığı isteklerinden birini kullanarak 30 günden eski verileri de okuyamazsınız.