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

Google Fit Sensor API无法获取TicWatch Pro心率数据源的技术咨询

关于Google Fit Sensor API订阅TicWatch Pro心率数据的问题解答

我之前开发健身类App时也碰到过类似Wear OS设备和Google Fit Sensor API兼容的问题,结合我的实战经验来给你梳理下解决方案:

先明确结论:是可以直接通过Sensor API订阅实时心率数据的

你的History API能正常拿到数据,说明账号权限、数据同步逻辑都是没问题的,问题大概率出在Sensor API的请求配置细节或者手表端的数据流优先级设置上。

1. 调整Sensor API的数据源请求参数

你当前代码指定了DataSource.TYPE_RAW,但很多Wear OS设备的心率数据是以**衍生数据(TYPE_DERIVED)**的形式推送的,而非原始数据。建议修改请求去掉数据源类型限制,或者同时兼容两种类型:

Fitness.getSensorsClient(this, getGoogleAccount()).findDataSources(
    DataSourcesRequest.Builder()
        .setDataTypes(DataType.TYPE_HEART_RATE_BPM)
        // 可以去掉setDataSourceTypes限制,或者同时支持RAW和DERIVED
        // .setDataSourceTypes(DataSource.TYPE_RAW, DataSource.TYPE_DERIVED)
        .build()
)

另外,部分手表只有在运动模式激活时才会通过Sensor API推送实时心率,你可以试试在TicWatch上启动一个运动项目,再重新调用findDataSources,大概率能找到对应的心率数据源。

2. 检查TicWatch Pro端的关键配置

TicWatch同时运行Mobvoi自有健康生态和Google Fit,有时候会出现数据流向冲突:

  • 确保手表上的Google Fit App登录了和手机端完全一致的谷歌账号,并且已经授予了身体传感器权限和健康数据访问权限
  • 暂时禁用Mobvoi健康App的心率访问权限(手表系统设置里可以找到),强制让心率数据直接流向Google Fit(测试完成后再恢复即可)
  • 检查手表的Wear OS版本,建议升级到最新稳定版,旧版本对Google Fit Sensor API的支持可能存在兼容性漏洞

3. 临时替代方案:History API轮询

如果上述调整后还是无法通过Sensor API获取实时数据,可以用History API做短时间范围的轮询,模拟实时数据效果:

private fun pollLatestHeartRate() {
    val endTime = System.currentTimeMillis()
    val startTime = endTime - 30_000 // 拉取最近30秒的心率数据
    Fitness.getHistoryClient(this, getGoogleAccount())
        .readData(
            DataReadRequest.Builder()
                .read(DataType.TYPE_HEART_RATE_BPM)
                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                .build()
        )
        .addOnSuccessListener { result ->
            result.dataSets.forEach { dataSet ->
                dataSet.dataPoints.forEach { dataPoint ->
                    // 提取最新心率值
                    val heartRate = dataPoint.getValue(Field.FIELD_BPM).asFloat()
                    Timber.i("Latest heart rate: $heartRate")
                }
            }
        }
}

你可以用Handler或者WorkManager设置每20-30秒执行一次这个方法,基本能满足健身App的实时数据需求。

总结

你的问题更偏向TicWatch Pro的Wear OS和自有生态的兼容性问题,而非Sensor API本身的功能限制。先调整请求参数并检查手表端的权限配置,应该就能找到心率数据源;如果还是不行,History API轮询是个可靠的临时方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:27:34