Android Health Connect聚合请求与读取记录请求结果矛盾问题求助
Android Health Connect聚合请求与读取记录请求结果矛盾问题求助
最近在折腾Android Health Connect的时候碰到了一个特别诡异的问题,连接和基础查询都能正常跑,但AggregateRequest和ReadRecordsRequest针对同一时间范围的返回结果完全矛盾,实在摸不着头脑,来请教各位开发者!
我当前使用的是Health Connect的最新候选版本 1.1.0-rc02,连接和基础请求逻辑都没问题,但两种请求的结果完全对不上:
1. 聚合请求(AggregateRequest)返回异常错误的数值
我用AggregateRequest查询指定时间范围内的消耗卡路里总量,代码如下:
suspend fun readCaloriesBurned(start: Instant, end: Instant): Energy { val request = AggregateRequest( metrics = setOf(TotalCaloriesBurnedRecord.ENERGY_TOTAL), timeRangeFilter = TimeRangeFilter.between(start, end) ) val response = healthConnectClient.aggregate(request) Timber.d(response.toString()) return response[TotalCaloriesBurnedRecord.ENERGY_TOTAL] ?: Energy.calories(0.0) }
运行后控制台输出:
AggregationResult(longValues={}, doubleValues={TotalCaloriesBurned_energy_total=1632.6842894415279}, dataOrigins=[])
显示该时间段消耗了1632多千卡,但这个数值完全不符合实际情况,明显是错误的。
2. 同一时间范围的读取记录请求(ReadRecordsRequest)返回0条记录
我把请求换成ReadRecordsRequest,时间范围完全保持不变,代码如下:
suspend fun readCaloriesBurned(start: Instant, end: Instant): Energy { val request = ReadRecordsRequest( recordType = TotalCaloriesBurnedRecord::class, timeRangeFilter = TimeRangeFilter.between(start, end) ) val response = healthConnectClient.readRecords(request) Timber.d("How many records are there? ${response.records.size}") Timber.d(response.records.toString()) return Energy.calories(0.0) }
运行后控制台输出:
How many records are there? 0 []
这说明同一时间范围内根本没有任何TotalCaloriesBurnedRecord记录。
我的疑问
- 为什么针对完全相同的时间范围,聚合请求能返回数据,而读取记录请求却显示没有任何记录?
- 难道我必须放弃AggregateRequest,自己遍历ReadRecords的结果来手动计算总量吗?
- 这个明显错误的聚合数值到底是从哪里来的?
有没有朋友碰到过类似的问题,或者知道这背后的原因?麻烦指点一下!
内容来源于stack exchange
相关产品推荐
相关产品推荐

