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ı, 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.

Kullanıcı tarafından seçilen uygulama önceliklerinden etkilenen toplu veriler

Son kullanıcılar, Health Connect ile entegre ettikleri Uyku ve Etkinlik uygulamaları için öncelik belirleyebilir. Bu öncelik listelerini yalnızca son kullanıcılar değiştirebilir. Toplu okuma gerçekleştirdiğinizde Toplu API, yinelenen verileri hesaba katar ve yalnızca uygulamadaki en yüksek önceliğe sahip verileri saklar. Kullanıcının aynı anda aynı türde veri (ör. atılan adım sayısı veya kat edilen mesafe) yazan birden fazla uygulaması varsa yinelenen veriler olabilir.

Son kullanıcıların uygulamalarına nasıl öncelik verebileceği hakkında bilgi edinmek için Health Connect verilerini yönetme başlıklı makaleyi inceleyin.

Kullanıcı, uygulama ekleyip kaldırabilir ve uygulama önceliklerini değiştirebilir. Kullanıcılar, Health Connect ekranındaki veri toplamalarının en yüksek önceliği verdikleri uygulamayla aynı olması için yinelenen veri yazan bir uygulamayı kaldırmak isteyebilir. Veri toplamları gerçek zamanlı olarak güncellenir.

Toplu API, Aktivite ve Uyku uygulamalarının verilerini kullanıcının önceliklerine göre tekilleştirerek hesaplasa da verileri yazan her uygulama için verileri ayrı ayrı hesaplamak üzere kendi mantığınızı oluşturabilirsiniz.

Health Connect yalnızca Etkinlik ve Uyku veri türlerinde tekilleştirme yapar. Gösterilen veri toplamları, Toplama API'si tarafından tekilleştirme yapıldıktan sonraki değerlerdir. Bu toplamlar, adım ve mesafeyle ilgili verilerin bulunduğu en son tam günü gösterir. Diğer uygulama türleri için, bu tür uygulamaların toplam sayısı Health Connect'teki veri toplamalarında gösterilir.

Arka planda okuma

Uygulamanızın arka planda çalışmasını ve Health Connect'ten veri okumasını isteyebilirsiniz. Arka Planda Okuma iznini talep ederseniz kullanıcınız, uygulamanıza arka planda veri okuma izni verebilir.