【问题标题】:Google Fit step counter history returns nothingGoogle Fit 计步器历史记录不返回任何内容
【发布时间】:2016-11-08 13:44:41
【问题描述】:

我想编写一个应用程序,通过询问 Google Fit API 来显示本周完成的所有步骤。不幸的是,我的 History API 调用总是返回空数据集。

为了调试,我使用的是安装了 Google Fit 的 Nexus 9 平板电脑。我在 Google Fit 应用中手动添加了步骤。

这是我获取步骤的代码

创建时:

...
mApiClient = new GoogleApiClient.Builder(this)
            .addApi(Fitness.SENSORS_API)
            .addApi(Fitness.RECORDING_API)
            .addApi(Fitness.HISTORY_API)
            .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
...

获取步骤的功能

private void showSteps() {
    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    cal.add(Calendar.WEEK_OF_YEAR, -1);
    long startTime = cal.getTimeInMillis();

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

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


    if (dataReadResult.getBuckets().size() > 0) {
        Log.i(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) {
                Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName());
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

                for (DataPoint dp : dataSet.getDataPoints()) {
                    Log.i(TAG, "Data point:");
                    Log.i(TAG, "\tType: " + dp.getDataType().getName());
                    Log.i(TAG, "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
                    Log.i(TAG, "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
                    for(Field field : dp.getDataType().getFields()) {
                        Log.i(TAG, "\tField: " + field.getName() +
                                " Value: " + dp.getValue(field));
                    }
                }
            }
        }
    } else if (dataReadResult.getDataSets().size() > 0) {
        Log.i(TAG, "Number of returned DataSets is: "
                + dataReadResult.getDataSets().size());
        for (DataSet dataSet : dataReadResult.getDataSets()) {
            Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName());
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

            for (DataPoint dp : dataSet.getDataPoints()) {
                Log.i(TAG, "Data point:");
                Log.i(TAG, "\tType: " + dp.getDataType().getName());
                Log.i(TAG, "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
                Log.i(TAG, "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
                for (Field field : dp.getDataType().getFields()) {
                    Log.i(TAG, "\tField: " + field.getName() +
                            " Value: " + dp.getValue(field));
                }
            }
        }
    }

我收到了存储桶,它们有数据集,但它们从来没有任何数据点。代码刚刚完成而没有错误。 ApiClient 返回它确实已连接到 Google Fit。

为什么 History API 不返回我添加到 Google Fit 应用中的步数?

提前致谢!

【问题讨论】:

    标签: android google-play-services google-fit


    【解决方案1】:

    事实证明,代码很好。当我添加这些步骤时,我注意到我在平板电脑上登录了另一个谷歌帐户。显然帐户必须相同。

    【讨论】:

    • 嘿伙计,您需要在您的设备上安装 google fit 应用程序才能获取历史数据,还是没有它就可以正常工作
    • 谢谢,关于 Api 提供给我们的数据还有一件事。它是提供客户端写入(插入)到 api 中的数据,还是提供用户走过的实际计数,以防我们不手动将任何内容插入 Fit api。
    • 那是我自己还没有真正弄清楚的事情......起初我认为它就像 Apple 的 Health API 一样,其中步骤等总是由 iOS 计算并用 Health API 编写。另一方面,当我开始使用 Google Fit 时,我得到了一些奇怪的数据……仍在测试中。如果您发现任何新内容,请告诉我^^
    【解决方案2】:

    尝试将.enableServerQueries() 添加到您的数据读取请求中。当本地不可用时,它会从 Google fit 服务器获取数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多