如何避免HealthConnect获取到Google Fit手动添加的不实步数数据?
如何过滤HealthConnect中Google Fit的手动添加步数数据
目前你通过dataOriginFilter限制仅从Google Fit获取步数数据,但Google Fit的手动添加步数会同步至HealthConnect,且尝试用recordingMethod过滤时发现该字段始终为RECORDING_METHOD_UNKNOWN,无法区分手动与自动记录。
可行解决方案
由于Google Fit暂未正确填充recordingMethod字段,可通过记录关联的设备信息来区分手动与自动步数:自动记录的步数通常会关联具体的传感器设备(如手机、智能手表),而手动添加的步数无设备信息或设备字段为空。
修改后的代码实现
override suspend fun steps(range: Pair<LocalDateTime, LocalDateTime>): Long { val client = HealthConnectClient.getOrCreate(context) val response = client.readRecords( ReadRecordsRequest( StepsRecord::class, dataOriginFilter = supportedPackages, timeRangeFilter = TimeRangeFilter.between(range.first, range.second) ) ) // 过滤掉无关联设备的记录(手动添加的步数通常无设备信息) val validSteps = response.records .filter { it.device != null } // 可选:进一步限定设备类型为常见的运动传感器设备 // .filter { it.device?.type in setOf(Device.TYPE_PHONE, Device.TYPE_WATCH) } .sumOf { it.count } return validSteps }
补充说明
这种方法并非绝对完美,但在当前Google Fit未完善recordingMethod字段填充的情况下,是最可靠的区分方式。若后续Google Fit更新了字段填充逻辑,可切换回recordingMethod过滤(手动添加记录的recordingMethod通常对应RECORDING_METHOD_MANUAL_INPUT,即值为3)。
内容的提问来源于stack exchange,提问作者Rasul Mingazov
相关产品推荐
相关产品推荐

