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.