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

Bin*_*ngh 5 android google-fit

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

DataReadRequest readRequest = queryFitnessData();
DataReadResult dataReadResult =
                    Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);
Run Code Online (Sandbox Code Playgroud)

数据请求是

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();
Run Code Online (Sandbox Code Playgroud)

rst*_*ler 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;

        }
    }
Run Code Online (Sandbox Code Playgroud)