You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 14:24:29