将Google Fit Data提取到Android应用程序中

时间:2015-01-30 11:05:06

标签: android google-fit

我们如何才能为特定用户获取存储在Google健身云中的数据? 我尝试使用History API但没有显示数据。然后我尝试输入一些数据vai History api,现在我只能通过历史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();

5 个答案:

答案 0 :(得分: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;

        }
    }

答案 1 :(得分:1)

你订阅了frist吗? 我有同样的问题,但在Fitness.RecordingApi.subscribe(mClient, myDataType)

之后解决了

myDataType为DataType.TYPE_STEP_COUNT_DELTADataType.TYPE_STEP_COUNT_CUMULATIVE

答案 2 :(得分:1)

我真的不明白如何在insertFitnessData()中插入步数计数器值。基本历史记录google程序已经有一个DataSet,其步长值为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来接收回调吗?我很困惑!

答案 3 :(得分:0)

如果您想从云中读取数据,则必须将以下调用添加到DataReadRequest.BuilderenableServerQueries()

所以你的代码看起来像这样:

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

答案 4 :(得分:0)

在我的情况下,我仍然可以使用水桶,它运作良好,直到它根本不服从我。无论如何,我修好了。还有一些可能的原因:

1)您是否订阅了此类数据?

2)您的应用与Google服务无法正常连接。您是否从Google开发控制台创建了OAuth客户端ID?这是谷歌连接到GG Fit服务的必修课(请注意,如果您在同一台计算机上克隆另一个应用程序,则需要重新创建另一个OAuth客户端ID,还有一件事你需要需要2个独立的帐户,一个用于登录Google开发控制台以创建OAuth客户端ID,另一个用于在启动应用程序后登录,并且会要求您登录以接受其权限,...不确定为什么会这样做是,但它会工作)

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

Mttdat。