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
相关产品推荐
相关产品推荐

