Фильтрация источника активности 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.

0 ответов

Другие вопросы по тегам