Birleştirilmiş verileri okuma

Health Connect'te veri toplama işlemi, temel toplamaları veya verilerin paketler halinde toplanmasını içerir. Aşağıdaki iş akışlarında her ikisinin de nasıl yapılacağı gösterilmektedir.

Temel toplama

Verilerinizde temel toplamadan yararlanmak için HealthConnectClient nesnenizde aggregate işlevini kullanın. Metrik türlerini ve zaman aralığını parametre olarak ekleyeceğiniz bir AggregateRequest nesnesini kabul eder. Temel toplamların 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ü için 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, örneklerle kayıtların minimum, maksimum veya ortalama değerlerini hesaplar.

Aşağıdaki örnekte istatistiksel toplamanın 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 paketler halinde toplamanıza da olanak tanır. Kullanabileceğiniz iki paket türü, süre ve dönem şeklindedir.

Çağrıldıktan sonra bir paket listesi döndürür. Listenin seyrek olabileceğini unutmayın. Bu nedenle, herhangi bir veri içermeyen paket, listeye dahil edilmez.

Süre

Bu durumda, birleştirilmiş veriler bir dakika veya bir saat gibi sabit bir süre içinde paketlere ayrılır. Verileri paketler halinde toplamak için aggregateGroupByDuration değerini kullanın. Metrik türlerini, zaman aralığını ve Duration parametresini parametre olarak eklediğiniz bir AggregateGroupByDurationRequest nesnesini kabul eder.

Aşağıda, adımların dakika uzunluğundaki gruplarda toplanmasına bir örnek 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
    }
}

Dönem

Bu durumda, birleştirilmiş veriler hafta veya ay gibi tarihe dayalı bir süre içinde paketlere bölünür. Verileri paketler halinde toplamak için aggregateGroupByPeriod değerini kullanın. Metrik türlerini, zaman aralığını ve Period parametresini parametre olarak eklediğiniz bir AggregateGroupByPeriodRequest nesnesini kabul eder.

Aşağıda, adımların aylık gruplar halinde toplanmasına bir örnek 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
    }
}

30 günlük okuma kısıtlaması

Uygulamalar, herhangi bir iznin ilk verilmesinden önceki 30 gün boyunca Health Connect'teki verileri okuyabilir.

Bununla birlikte, 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 kadar Health Connect'teki verileri okuyabilir.

Örnek

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

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