0

我需要获取用户从开始使用该应用程序到今天所走过的步数。如何使用 Google FIT api 执行此操作?

4

2 回答 2

1

我自己也有过这个问题。我所做的是建立一个 DataRequest :

现在结束时间(今天):

Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();

以及 Google fit 应用首版发布的开始时间:

cal.set(2014, 9, 28);
cal.set(Calendar.HOUR_OF_DAY, 0); //so it get all day and not the current hour
cal.set(Calendar.MINUTE, 0); //so it get all day and not the current minute
long startTime = cal.getTimeInMillis();

DataReadRequest 构建:(您可以根据需要存储桶)

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

这样您就可以获得从 2014 年 10 月 28 日开始的所有数据

于 2016-04-15T13:12:31.037 回答
1

您可以使用Fitness History API,使您的应用能够在健身商店上执行批量操作,例如读取、插入、更新和删除健身数据。

您需要创建一个DataReadRequest实例来从健身历史中读取数据。

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

java.text.DateFormat dateFormat = DateFormat.getDateInstance();
Log.e("History", "Range Start: " + dateFormat.format(startTime));
Log.e("History", "Range End: " + dateFormat.format(endTime));

//Check how many steps were walked and recorded in the last 7 days
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();

Bucket您还可以按时间或会话将这些数据分组到对象中。对于此示例,您请求上周的聚合步骤数据并按天存储该数据。

Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.HOUR_OF_DAY, -1);
long startTime = cal.getTimeInMillis();

DataSource dataSource = new DataSource.Builder()
    .setAppPackageName(this)
    .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
    .setName("Step Count")
    .setType(DataSource.TYPE_RAW)
    .build();

int stepCountDelta = 1000000;
DataSet dataSet = DataSet.create(dataSource);

DataPoint point = dataSet.createDataPoint()
        .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
point.getValue(Field.FIELD_STEPS).setInt(stepCountDelta);
dataSet.add(point);

本教程中的此示例使用聚合数据点,其中每个数据点DataPoint代表一天中步行的步数。

检查这个相关的So问题:

于 2016-04-12T07:36:25.717 回答