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

Android获取每日步数:替代已弃用Google Fit HistoryClient的方案咨询

获取每日步数:Google Fit HistoryClient弃用后的替代方案

问题背景

之前通过Google Fit API的Fitness.getHistoryClient获取每日步数,但该API已被弃用。官方推荐改用Health Connect,但多数用户设备未安装该应用,需要寻找类似之前的简便替代方法。

此前使用的代码:

Fitness.getHistoryClient(this, account)
        .readData(readRequest)
        .addOnSuccessListener { response ->
            val dataSet = response.getDataSet(DataType.TYPE_STEP_COUNT_DELTA)
            Log.i(TAG, "Data returned for Data type: " + dataSet.dataType.name)
            for (dp in dataSet.dataPoints) {
                Log.i(TAG, "Data point:")
                Log.i(TAG, "\tType: " + dp.dataType.name)
                Log.i(TAG, "\tStart: " + DateFormat.getInstance().format(dp.getStartTime(TimeUnit.MILLISECONDS)))
                Log.i(TAG, "\tEnd: " + DateFormat.getInstance().format(dp.getEndTime(TimeUnit.MILLISECONDS)))
                for (field in dp.dataType.fields) {
                    Log.i(TAG, "\tField: " + field.name + " Value: " + dp.getValue(field))
                }
            }
        }
        .addOnFailureListener { e ->
            Log.e(TAG, "onFailure()", e)
        }

可行替代方案

1. 临时过渡:继续使用HistoryClient

虽然HistoryClient被标记为弃用,但目前Android端Google Fit SDK仍支持该接口调用,可作为短期过渡方案。不过需注意,未来版本可能会彻底移除该API,长期仍需适配Health Connect。

2. 实时获取:使用SensorsClient

如果需要实时步数数据,可改用SensorsClient监听步数传感器,无需依赖Health Connect(仅需设备有Google Fit服务或应用):

// 初始化传感器客户端
val sensorsClient = Fitness.getSensorsClient(this, account)

// 构建传感器请求,设置采样频率和数据类型
val sensorRequest = SensorRequest.Builder()
    .setDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE) // 累计步数,也可用TYPE_STEP_COUNT_DELTA获取增量
    .setSamplingRate(1, TimeUnit.SECONDS)
    .build()

// 注册步数监听
sensorsClient.add(sensorRequest, object : SensorEventListener() {
    override fun onSensorEvent(event: SensorEvent) {
        val dataSet = event.dataSet
        for (dp in dataSet.dataPoints) {
            for (field in dp.dataType.fields) {
                val stepCount = dp.getValue(field).asInt()
                Log.i(TAG, "当前累计步数: $stepCount")
                // 可在此处处理或存储步数数据
            }
        }
    }

    override fun onFailure(e: Exception) {
        Log.e(TAG, "步数监听失败", e)
    }
})

3. 兼容方案:同时支持Health Connect和旧API

为覆盖更多用户,可先检查设备是否安装Health Connect,再选择对应API:

// 检查Health Connect是否安装
private fun isHealthConnectInstalled(): Boolean {
    return try {
        packageManager.getPackageInfo("com.google.android.apps.healthdata", 0)
        true
    } catch (e: PackageManager.NameNotFoundException) {
        false
    }
}

// 使用时判断
if (isHealthConnectInstalled()) {
    // 调用Health Connect API获取步数
} else {
    // fallback到Google Fit旧API(HistoryClient或SensorsClient)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:40:58