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

如何通过Health Connect API订阅FitBit心率更新?

Health Connect 订阅心率数据更新的最佳实践

核心实现:基于变更令牌的增量监听

针对Fitbit每分钟同步心率到Health Connect的场景,新版Health Connect API(适配Android 13+)中,官方推荐用变更令牌(Changes Token)机制替代已失效的Changes Sync API,这是目前最接近“回调触发”需求的方案,无需全量轮询或依赖WorkManager的周期性任务。

1. 获取初始变更令牌

首先通过HealthConnectClient获取对应数据类型的变更令牌,后续所有变更拉取都基于这个令牌:

val healthConnectClient = HealthConnectClient.getOrCreate(context)
// 指定监听心率数据类型
val heartRateToken = healthConnectClient.getChangesToken(setOf(HeartRateRecord::class))

2. 实现近实时监听(替代回调的方案)

Health Connect暂未提供直接的变更回调API,你可以通过以下两种方式实现近似“触发式”的监听:

  • 前台轻量服务:启动一个前台服务,每隔30-60秒(匹配Fitbit的更新频率)调用getChanges()拉取增量数据。由于用了变更令牌,每次只会返回上次拉取后的新数据,资源消耗极低。
  • 系统广播监听:部分设备支持监听android.health.connect.action.DATA_CHANGED系统广播,收到广播后立即调用getChanges()拉取最新心率数据(需注意部分厂商可能限制该广播的接收)。

3. 处理增量变更数据

调用getChanges()后会返回包含新数据的ChangesResponse,同时生成新的变更令牌,需持久化存储以便下次拉取:

val changesResponse = healthConnectClient.getChanges(heartRateToken)
// 筛选出新增的心率记录
val newHeartRates = changesResponse.changes.filterIsInstance<HeartRateRecord>()
// 处理最新心率数据(比如更新UI、上传服务器等)
// 持久化新令牌,用于下次拉取
saveNewChangesToken(changesResponse.nextChangesToken)

关键注意事项

  • 权限要求:必须在Manifest中声明android.permission.health.READ_HEART_RATE,并在运行时获取用户授权。
  • 令牌持久化:变更令牌需要存在SharedPreferences或本地数据库中,避免应用重启后重新拉取所有历史数据。
  • 电量优化:前台服务需控制拉取间隔,避免过于频繁;如果使用广播监听,需测试不同厂商设备的兼容性。
  • 文档参考:目前官方文档关于变更监听的描述确实模糊,可重点查看Sync Data章节中“变更令牌”相关内容,替代已失效的Changes Sync API链接。

关于轮询的补充

虽然你倾向于避免轮询,但结合变更令牌的增量轮询(1分钟间隔)资源消耗极低,因为不会全量同步数据,只是拉取新增的心率记录,这也是很多开发者当前的折中方案。

内容的提问来源于stack exchange,提问作者Ana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:55:22