android - Google Fit History API - 步数值不正确

标签 android google-fit google-fit-sdk

我正在尝试获取今天的步行步骤。因此我找到了2个解决方案。 1)

private void getStepsToday() {
    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 00);
    long startTime = cal.getTimeInMillis();

    final DataReadRequest readRequest = new DataReadRequest.Builder()
            .read(DataType.TYPE_STEP_COUNT_DELTA)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    DataReadResult dataReadResult =
            Fitness.HistoryApi.readData(mGoogleApiFitnessClient, readRequest).await(1, TimeUnit.MINUTES);

    DataSet stepData = dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);

    int totalSteps = 0;

    for (DataPoint dp : stepData.getDataPoints()) {
        for(Field field : dp.getDataType().getFields()) {
            int steps = dp.getValue(field).asInt();

            totalSteps += steps;

        }
    }}

2)

private void getStepsToday() {
    PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(mGoogleApiFitnessClient, DataType.TYPE_STEP_COUNT_DELTA);
    DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
    if (totalResult.getStatus().isSuccess()) {
        DataSet totalSet = totalResult.getTotal();
        int total = totalSet.isEmpty()
                ? 0
                : totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
        publishTodaysStepData(total);
    } else {
        publishTodaysStepData(0);
    }
}

通过使用第一个,我得到了示例 27,并使用第二个得到了 1425 步作为答案。正确的(与 google fit 应用程序比较后)应该是 1425。那么为什么第一个不起作用?

我也遇到了同样的问题,询问了上周的步骤。通过使用上周的步数方法 1,我意识到我确实获得了正确日期的步数(有时甚至是正确的日子),但每当步数值超过 50(我认为)时,该值就不正确。

有人对这种奇怪的行为有答案吗?

最佳答案

试试这个

public int getStepsCount(long startTime, long endTime) {
    DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder()
            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
            .setType(DataSource.TYPE_DERIVED)
            .setStreamName("estimated_steps")
            .setAppPackageName("com.google.android.gms").build();
    PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi
            .readData(
                    fitnessClient,
                    new DataReadRequest.Builder()
                            .aggregate(ESTIMATED_STEP_DELTAS,
                                    DataType.AGGREGATE_STEP_COUNT_DELTA)
                            .bucketByTime(1, TimeUnit.HOURS)
                            .setTimeRange(startTime, endTime,
                                    TimeUnit.MILLISECONDS).build());
    int steps = 0;
    DataReadResult dataReadResult = pendingResult.await();
    if (dataReadResult.getBuckets().size() > 0) {
        //Log.e("TAG", "Number of returned buckets of DataSets is: "
                //+ dataReadResult.getBuckets().size());
        for (Bucket bucket : dataReadResult.getBuckets()) {
            List<DataSet> dataSets = bucket.getDataSets();
            for (DataSet dataSet : dataSets) {
                for (DataPoint dp : dataSet.getDataPoints()) {
                    for (Field field : dp.getDataType().getFields()) {
                        steps += dp.getValue(field).asInt();
                    }
                }
            }
        }
    } else if (dataReadResult.getDataSets().size() > 0) {
        for (DataSet dataSet : dataReadResult.getDataSets()) {
            for (DataPoint dp : dataSet.getDataPoints()) {
                for (Field field : dp.getDataType().getFields()) {
                    steps += dp.getValue(field).asInt();
                }
            }
        }
    }
    return steps;
}

关于android - Google Fit History API - 步数值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084380/

相关文章:

android - Sceneform 与相机的碰撞

android - 如何从 Google Fit 历史记录中获取心率值?

java - 谷歌健身 : What is DataType Floor of Google Fit.

android - Amazon Firefly - 将插件添加到应用程序

android - 如何将 TTS 安装 Intent 指向亚马逊应用商店?

javascript - window.getselection 在 Android 中不起作用

java - 无法连接到 Google Play 服务;获取取消状态代码

android - Xamarin.Android 的 Ble Api 示例

java - 将高度插入 Google Fit API 时出现字段超出范围错误

java - 访问 Android Wear Fit 数据