Agregowanie danych w Health Connect obejmuje agregacje podstawowe do zasobników. Poniżej znajdziesz instrukcje, jak to zrobić.
Agregacja podstawowa
Aby użyć podstawowej agregacji danych, użyj funkcji aggregate
.
na obiekcie HealthConnectClient
. Akceptuje ona
AggregateRequest
obiekt, do którego dodajesz typy danych.
i zakresu czasu jako jego parametrów. Sposób wywoływania agregacji podstawowych zależy od
użytych typów danych.
Agregacja skumulowana
Agregacja skumulowana oblicza łączną wartość.
Z przykładu poniżej dowiesz się, jak agregować dane określonego typu:
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
}
}
Agregacja statystyczna
Agregacja statystyczna oblicza minimalne, maksymalne lub średnie wartości rekordy z przykładami.
Ten przykład pokazuje, jak korzystać z agregacji statystycznej:
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
}
}
Zasobniki
Health Connect umożliwia też gromadzenie danych w grupach. Te 2 typy możesz uwzględnić atrybuty duration i period.
Po wywołaniu zwraca listę zasobników. Pamiętaj, że lista może być rozproszona, jeśli zasobnik nie zawiera żadnych danych, nie pojawi się na liście.
Czas działania
W tym przypadku dane zbiorcze są dzielone na segmenty o stałej długości
, np. minuta lub godzina. Aby zebrać dane w zasobnikach, użyj funkcji
aggregateGroupByDuration
Akceptuje ona
AggregateGroupByDurationRequest
, w którym dodajesz
typy danych, zakres czasu i Duration
jako parametry.
Poniżej znajduje się przykład agregacji kroków do jednominutowych zasobników:
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
}
}
Kropka
W tym przypadku dane zbiorcze są dzielone na segmenty w ilości określonej na podstawie daty.
np. tydzień lub miesiąc. Aby zebrać dane w zasobnikach, użyj funkcji
aggregateGroupByPeriod
Akceptuje ona
AggregateGroupByPeriodRequest
, w którym dodajesz
typy danych, zakres czasu i Period
jako parametry.
Poniżej znajduje się przykład agregacji kroków do poszczególnych miesięcznych segmentów:
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
}
}
Ograniczenie czytania przez 30 dni
Aplikacje mogą odczytywać dane z Health Connect nawet przez 30 dni przed użytkownik udzielono najpierw dowolnego pozwolenia.
Jeśli jednak użytkownik usunie Twoją aplikację, historia uprawnień zostanie utracona. Jeśli użytkownik ponownie zainstaluje Twoją aplikację i ponownie przyzna jej uprawnienia, będzie mogła odczytywać dane z Health Connect do 30 dni przed nową datą.
Przykład
Jeśli 30 marca 2023 r. użytkownik po raz pierwszy przyznał aplikacji uprawnienia do odczytu, najstarsze dane, jakie aplikacja może odczytać, pochodzą z 28 lutego 2023 roku.
Następnie użytkownik usunie Twoją aplikację 10 maja 2023 r. Użytkownik decyduje się na ponowne zainstalowanie. 15 maja 2023 r. i przyznać uprawnienia do odczytu. Najwcześniejsza możliwa data aplikacji od 15 kwietnia 2023 r.