4

我们如何为特定用户获取存储在 google fit 云中的数据?我尝试使用 History API,但没有显示任何数据。然后我尝试输入一些数据vai History api,现在我只能通过history api看到这些数据,而不是实际存在的完整数据。

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

数据请求是

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

5 回答 5

4

根据您的问题,很难知道您期待什么但没有收到。更多细节会有所帮助。

我猜这是因为 Fit 正在返回默认的合并步骤流。基本上,如果两个应用程序在相同的 60 分钟内都报告了 1,000 步,Fit 将假定它们是重复的,并将它们“合并”以进行响应。

尝试丢失存储桶功能,看看您是否获得原始步骤。这段代码对我有用:

    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;

        }
    }
于 2015-02-02T16:31:07.467 回答
1

你订阅了吗?我有同样的问题,但之后解决了Fitness.RecordingApi.subscribe(mClient, myDataType)

myDataType 是DataType.TYPE_STEP_COUNT_DELTADataType.TYPE_STEP_COUNT_CUMULATIVE

于 2015-05-07T07:55:08.037 回答
1

我真的不明白如何在 insertFitnessData() 中插入计步器值。Basic History google 程序已经有一个数据集,其步长值为 1000。我应该如何更改该部分,以便它可以计算我在过去一小时内所做的步数?

    DataSet dataSet = DataSet.create(dataSource);
    // For each data point, specify a start time, end time, and the data  
    value -- in this case,
    // the number of new steps.
    DataPoint dataPoint = dataSet.createDataPoint()
            .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);

我应该使用 OnDataPointListener 来接收回调吗?我很困惑!

于 2015-05-14T12:26:23.317 回答
0

如果要从云端读取数据,必须添加以下调用DataReadRequest.BuilderenableServerQueries()

因此,您的代码将如下所示:

final DataReadRequest readRequest = new DataReadRequest.Builder()
        .read(DataType.TYPE_STEP_COUNT_DELTA)
        .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
        .enableServerQueries()
        .build();
于 2015-03-31T19:36:59.860 回答
0

就我而言,我仍然可以使用存储桶,并且它运行良好,直到它完全不服从我。无论如何,我修好了。有一些可能的原因:

1)您订阅了此类数据吗?

2) 您的应用无法与谷歌服务正确连接。您是否从 Google 开发控制台创建了 OAuth 客户端 ID?这是 google 必须连接到其 GG Fit 服务的指令(请注意,如果您克隆另一个应用程序,无论是否在同一台计算机上,您都需要重新创建另一个 OAuth 客户端 ID,并且您还需要 2 个单独的帐户,一个用于登录 Google 开发控制台以创建 OAuth 客户端 ID,另一个用于在启动您的应用程序后登录,它会要求您登录以接受其许可,......不知道为什么会这样,但它会工作)

注意:顺便说一句,您可以在您的设备中搜索有关 Google 设置(设置 --> Google),在这里您可以找到连接到 google 服务(包括 GG Fit 服务)的应用程序。我建议您断开所有连接并删除 OAuth 客户端 ID、您的应用程序,然后重新创建所有这些!

月票。

于 2017-06-01T09:21:18.693 回答