Health Connect'te verileri toplama, temel toplamaları veya verileri gruplar halinde 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şlevini kullanmak için HealthConnectClient
nesnenizde aggregate
işlevini kullanın. Parametreleri olarak metrik türlerini ve zaman aralığını eklediğiniz bir AggregateRequest
nesnesini kabul eder. Temel toplamaların nasıl çağrıldığı, 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
}
}
Veri kaynağına göre filtreleme
Toplu verileri kaynağına göre de filtreleyebilirsiniz. Örneğin, yalnızca belirli bir uygulama tarafından yazılan verileri ekleme.
Aşağıdaki örnekte, belirli bir uygulamadaki adımları toplamak için dataOriginFilter
ve AggregateRequest
nasıl kullanılacağı gösterilmektedir:
suspend fun aggregateStepsFromSpecificApp(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant,
appPackageName: String
) {
try {
val response = healthConnectClient.aggregate(
AggregateRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
dataOriginFilter = setOf(DataOrigin(appPackageName))
)
)
// The result may be null if no data is available in the time range
val totalSteps = response[StepsRecord.COUNT_TOTAL] ?: 0L
} catch (e: Exception) {
// Run error handling here
}
}
İstatistiksel toplama
İstatistiksel toplama, örnek içeren 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
}
}
Paketler
Health Connect, verileri gruplandırmanıza da olanak tanır. Kullanabileceğiniz iki tür grup vardır: süre ve dönem.
Çağrıldığında bir paket listesi döndürürler. Listenin seyrek olabileceğini unutmayın. Bu nedenle, herhangi bir veri içermeyen gruplar listeye dahil edilmez.
Süre
Bu durumda, toplanan veriler sabit bir süre içinde (ör. bir dakika veya bir saat) gruplara ayrılır. Verileri gruplandırmak için aggregateGroupByDuration
kullanın. Parametre olarak metrik türlerini, zaman aralığını ve Duration
eklediğiniz bir AggregateGroupByDurationRequest
nesnesi kabul eder.
Aşağıda, adımların bir dakikalık gruplar halinde toplandığı 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
}
}
Nokta
Bu durumda, toplanan veriler haftalık veya aylık gibi tarihe dayalı bir süre içinde gruplara ayrılır. Verileri gruplandırmak için aggregateGroupByPeriod
kullanın. Parametre olarak metrik türlerini, zaman aralığını ve Period
eklediğiniz bir AggregateGroupByPeriodRequest
nesnesi kabul eder.
Aşağıda, adımların aylık gruplar halinde toplandığı 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
}
}
Okuma kısıtlamaları
Varsayılan olarak, tüm uygulamalar herhangi bir izin ilk kez verilmeden önceki 30 güne kadar olan Health Connect verilerini okuyabilir.
Okuma izinlerini varsayılan kısıtlamaların ötesine genişletmeniz gerekiyorsa PERMISSION_READ_HEALTH_DATA_HISTORY
isteğinde bulunun.
Aksi takdirde, bu izin olmadan 30 günden eski kayıtları okuma girişimi hatayla sonuçlanır.
Silinen bir uygulamanın izin geçmişi
Bir kullanıcı uygulamanızı silerse geçmiş izni de dahil olmak üzere tüm izinler iptal edilir. Kullanıcı uygulamanızı yeniden yükleyip tekrar izin verirse aynı varsayılan kısıtlamalar geçerli olur ve uygulamanız, Health Connect'teki verileri bu yeni tarihten önceki 30 gün boyunca okuyabilir.
Örneğin, kullanıcının uygulamanızı 10 Mayıs 2023'te sildiğini, 15 Mayıs 2023'te yeniden yüklediğini ve okuma izni verdiğini varsayalım. Uygulamanızın artık varsayılan olarak veri okuyabileceği en erken tarih 15 Nisan 2023'tür.
Kullanıcı tarafından seçilen uygulama önceliklerinden etkilenen toplu veriler
Son kullanıcılar, Health Connect ile entegre ettikleri Uyku ve Aktivite uygulamalarına öncelik verebilir. Bu öncelik listelerini yalnızca son kullanıcılar değiştirebilir. Toplu okuma işlemi gerçekleştirdiğinizde Aggregate API, yinelenen verileri hesaba katar ve yalnızca en yüksek önceliğe sahip uygulamadaki verileri saklar. Kullanıcı aynı anda aynı türde verileri (ör. atılan adım sayısı veya kat edilen mesafe) yazan birden fazla uygulamaya sahipse 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ı, uygulamaları ekleyebilir veya kaldırabilir ve önceliklerini değiştirebilir. Kullanıcı, Health Connect ekranındaki veri toplamlarının en yüksek önceliği verdiği uygulamayla aynı olması için yinelenen veriler yazan bir uygulamayı kaldırmak isteyebilir. Veri toplamları gerçek zamanlı olarak güncellenir.
Aggregate API, Etkinlik ve Uyku uygulamalarının verilerini kullanıcının öncelikleri nasıl ayarladığına göre yinelenen verileri kaldırarak hesaplasa da bu verileri her uygulama için ayrı ayrı hesaplamak üzere kendi mantığınızı oluşturabilirsiniz.
Yalnızca Etkinlik ve Uyku veri türleri Health Connect tarafından yinelenen verilerden arındırılır ve gösterilen toplam veriler, Toplama API'si tarafından yinelenen verilerden arındırma işlemi gerçekleştirildikten sonraki değerlerdir. Bu toplamlar, adımlar ve mesafe verilerinin bulunduğu en son tam günü gösterir. Diğer uygulama türlerinde ise bu türdeki tüm uygulamaların toplam sayısı Health Connect'teki veri toplamlarında gösterilir.
Arka planda okuma
Uygulamanızın arka planda çalışmasını ve Health Connect'teki verileri okumasını isteyebilirsiniz. Background Read (Arka Planda Okuma) izni isterseniz kullanıcınız, uygulamanıza arka planda veri okuma erişimi verebilir.
Kayıt bazında desteklenen toplu veri türleri
Bu tabloda, Health Connect kaydına göre desteklenen tüm toplu veri türleri listelenir.