【问题标题】:Step count retrieved through Google Fit Api does not match Step count displayed in Google Fit Official App通过 Google Fit Api 检索到的步数与 Google Fit 官方应用中显示的步数不匹配
【发布时间】:2015-06-07 11:49:36
【问题描述】:

我开发了一个需要显示每日步数的应用程序。 为此,我使用了 Google Fit SDK 中提供的 API。

似乎一切正常,但我获得的步数与 Google Fit 官方应用程序中显示的步数不匹配。

例如,当 Google Fit 应用显示 2367 步时,我得到 2308 步。

这是有原因的吗?有没有人有同样的问题? 有人知道吗?

【问题讨论】:

  • 是否可以发布一些代码?您是否使用 AsyncTask 类来记录后台的步骤?几天前我问过这个问题,但没有人回答我。stackoverflow.com/questions/30129784/….
  • 你能发布你的代码吗?

标签: android google-fit google-fit-sdk


【解决方案1】:

我找到了解决办法。

Fit 应用会在这些步骤的基础上进行一些额外的处理。当没有记录时,它会根据活动估计步数。

如果它可以帮助某人: 您需要使用包 com.google.android.gms 的自定义数据源

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();

并像这样在您的聚合方法中使用它:

DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(ESTIMATED_STEP_DELTAS, DataType.AGGREGATE_STEP_COUNT_DELTA)
            .bucketByTime(1, TimeUnit.DAYS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

【讨论】:

  • 这对我有帮助,干得好。你是怎么得到这个解决方案的?该信息的任何来源,或者只是您的辛勤工作?
  • 我仍然没有得到相同的值,大多数情况下返回的值都超过了 Google Fit 报告的值!它实际上比示例中显示的方式更不准确。
  • 能否给我们完整的代码来从请求中获取值,因为我找不到它
  • 卡路里呢?以下代码不返回任何内容。 DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder() .setDataType(DataType.TYPE_CALORIES_EXPENDED) .setType(DataSource.TYPE_DERIVED) .setStreamName("estimated_calories") .setAppPackageName("com.google.android.gms") .build();跨度>
  • 谁能帮我找到像这样燃烧的卡路里? @托马斯
【解决方案2】:

Google Play Services 7.3(2015 年 4 月 28 日发布)为 HistoryApi.readDailyTotal 添加了一个新方法,该方法与 Google Fit 官方应用上的步数相匹配,并且更易于使用。

    PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(fitnessApiClient, DataType.AGGREGATE_STEP_COUNT_DELTA);
    DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
    if (totalResult.getStatus().isSuccess()) {
        DataSet totalSet = totalResult.getTotal();
        steps = totalSet.isEmpty() ? -1 : totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
    }

【讨论】:

  • 没有服务我怎么能做到这一点?使用 await,它会在主要活动代码中出现错误,并且将 await 更改为 0 秒不会获取数据。
  • 如果没有 Google Play 服务,您将无法做到这一点。您必须在后台线程中使用 await。如果要在主线程中使用,请调用 result.setResultCallback(...);
  • 我如何使用 Fitness.HistoryApi.readDailyTotal 获得距离
【解决方案3】:

根据Sameer Z. 的要求,我正在发布完整代码以获取值。

DataSource estimatedSteps = new DataSource.Builder()
    .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
    .setType(DataSource.TYPE_DERIVED)
    .setStreamName("estimated_steps")
    .setAppPackageName("com.google.android.gms")
    .build();

DataReadRequest readRequest = new DataReadRequest.Builder()
        .aggregate(estimatedSteps, DataType.AGGREGATE_STEP_COUNT_DELTA)
        .setTimeRange(startTimeSeconds, endTimeSeconds, TimeUnit.SECONDS)
        .bucketByTime(1, TimeUnit.DAYS)
        .enableServerQueries()
        .build();

PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi.readData(client, readRequest);
pendingResult.setResultCallback(new ResultCallback<DataReadResult>() {
    @Override
    public void onResult(@NonNull DataReadResult dataReadResult) {
        List<Bucket> allBuckets = dataReadResult.getBuckets();

        for (Bucket bucket : allBuckets) {
            long startAtSeconds = bucket.getStartTime(TimeUnit.SECONDS);

            Value stepsValue = getValue(bucket, DataType.TYPE_STEP_COUNT_DELTA, Field.FIELD_STEPS);
            int steps = stepsValue != null ? stepsValue.asInt() : 0;

            Log.d(TAG, String.format("startAtSeconds %s, steps %s", startAtSeconds, steps));
        }
    }
});

【讨论】:

  • 你能帮我找出像这样燃烧的卡路里吗?
【解决方案4】:

Google Fit sdk 是 Google Play 服务的一部分。官方的 Google Fit 应用程序也从 Google Play 服务 sdk 收集相同的数据,但 Google 可能在 Google Fit 应用程序中添加了更多代码以使数据更丰富准确的。这也可能是 Google Fit 应用程序中的错误。

【讨论】:

  • 好的,你有这个信息的具体来源或文件吗?如果是的话,你能提供吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多