0

当 getDailyTotal 和 getData 按天访问时,Stepcount 是不同的。请帮忙。

Fitness.HistoryApi.readDailyTotal(App.gClient, DataType.TYPE_STEP_COUNT_DELTA)-> 返回步数为 1515

private void getStepsDataHistory(long startTime, long endTime) {
DataReadRequest dataReadRequest = new DataReadRequest.Builder()
.bucketByTime(1, TimeUnit.DAYS)
.aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS).build();

-> 返回一周的数据,其中今天的步数 =2877

编辑:我也在 logcat 中收到此警告: 在 DataType{com.google.step_count.delta{steps(i)}} 的共享首选项中找不到聚合数据。

4

1 回答 1

0

请确保您提供的开始时间和结束时间是正确的,即从午夜 12 点到现在。但是,如果您需要在无法显示权限面板的区域(例如,Android Wear 表盘)使用步骤数据,readDailyTotal 会很有用。所以我建议你使用 Aggregate 方法,这样你会得到与 google fit 应用程序相同的步数。看一下这个 。

public int getStepsCount(long startTime, long endTime) {
    PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi
            .readData(
                    fitnessClient,
                    new DataReadRequest.Builder()
                            .aggregate(DataType.TYPE_STEP_COUNT_DELTA,
                                    DataType.AGGREGATE_STEP_COUNT_DELTA)
                            .bucketByTime(1, TimeUnit.DAYS)
                            .setTimeRange(startTime, endTime,
                                    TimeUnit.MILLISECONDS)
                                    .build());
    int steps = 0;
    DataReadResult dataReadResult = pendingResult.await();
    if (dataReadResult.getBuckets().size() > 0) {
        for (Bucket bucket : dataReadResult.getBuckets()) {
            List<DataSet> dataSets = bucket.getDataSets();
            for (DataSet dataSet : dataSets) {
                for (DataPoint dp : dataSet.getDataPoints()) {
                    for (Field field : dp.getDataType().getFields()) {
                        steps += dp.getValue(field).asInt();
                    }
                }
            }
        }
    } else if (dataReadResult.getDataSets().size() > 0) {
        for (DataSet dataSet : dataReadResult.getDataSets()) {
            for (DataPoint dp : dataSet.getDataPoints()) {
                for (Field field : dp.getDataType().getFields()) {
                    steps += dp.getValue(field).asInt();
                }
            }
        }
    }
    return steps;
}
于 2016-02-22T06:28:59.243 回答