Фильтрация источника активности HealthConnect
Я использую HealthConnect для получения данных о действиях пользователя за определенный период времени.
Для большей безопасности я фильтрую источник активности, используя поле data originFilter в AggregateRequest. Таким образом, в мое приложение данные поступают только из Google Fit.
Однако Google Fit предоставляет возможность вручную добавлять значения шагов и синхронизировать эти данные с HealthConnect. Соответственно, мое приложение может получить неверные данные о количестве шагов, которые на самом деле сделал пользователь. Можно ли избежать такой ситуации?
override suspend fun steps(range: Pair<LocalDateTime, LocalDateTime>): Long {
val client = HealthConnectClient.getOrCreate(context)
val aggregateRequest = AggregateRequest(
setOf(StepsRecord.COUNT_TOTAL),
TimeRangeFilter.between(range.first, range.second),
supportedPackages
)
val aggregateData = client.aggregate(aggregateRequest)
return aggregateData[StepsRecord.COUNT_TOTAL] ?: 0
}
Обновление: я обнаружил, что такие данные можно фильтровать с помощью класса метаданных.
val response = client.readRecords(
ReadRecordsRequest(
StepsRecord::class,
dataOriginFilter = supportedPackages,
timeRangeFilter = TimeRangeFilter.Companion.between(range.first, range.second)
)
)
val steps = response.records.filter { it.metadata.recordingMethod != 3 }.sumOf { it.count }
Но Google Fit не заполняет это поле при синхронизации данных с HealthConnect, поэтому метод записи для всех записей — RECORDING_METHOD_UNKNOWN.