【问题标题】:How to read cycling and running data from Google Fit History API using readDailyTotal如何使用 readDailyTotal 从 Google Fit History API 读取骑行和跑步数据
【发布时间】:2016-04-17 09:09:48
【问题描述】:

我正在尝试使用 readDailyTotal 方法从 Fitness History Api 读取每日数据。我想读步、骑自行车和跑步。我已成功实施步骤,但我无法获得骑自行车和跑步的每日结果。

这是我用来获取步骤的代码,它可以工作:

PendingResult<DailyTotalResult> resultSteps
                = Fitness.HistoryApi.readDailyTotal(mGoogleApiClient, DataType.TYPE_STEP_COUNT_DELTA);

resultSteps.setResultCallback(new ResultCallback<DailyTotalResult>() {
      @Override
      public void onResult(@NonNull DailyTotalResult dailyTotalResult) {
          if (dailyTotalResult.getStatus().isSuccess()) {
            DataSet dataSet = dailyTotalResult.getTotal();

             for (DataPoint dp : dataSet.getDataPoints()) {
                Log.i(TAG, "DataType: " + dp.getDataType().getName());
                for (Field field : dp.getDataType().getFields()) {
                    Log.i(TAG, "\tField: " + field.getName() +
                            " Value: " + dp.getValue(field));
                    Log.i(TAG, "Field: " + field.getName());
                    Log.i(TAG, "Field: " + field.getFormat());
                    Log.i(TAG, "Field: " + dp.getDataType().getName());
                    Log.i(TAG, "---------------------------------");
                }
              }
          } 
      }
});

我尝试使用相同的代码,但用于骑行:

PendingResult<DailyTotalResult> resultCycling
                    = Fitness.HistoryApi.readDailyTotal(mGoogleApiClient, DataType.TYPE_CYCLING_WHEEL_RPM);

我也尝试使用不同的 DataType,例如: TYPE_CYCLING_PEDALING_CADENCETYPE_CYCLING_PEDALING_CUMULATIVETYPE_CYCLING_WHEEL_REVOLUTION

它不起作用。我也阅读了整个 Fitness Fit 文档,但我不知道该怎么做。

那么,我的问题是如何获取骑行和跑步的每日数据?如果你能给我一些sn-p,我将不胜感激。

谢谢:)

【问题讨论】:

  • 您希望如何捕获骑行数据?标准的 FIT 应用程序不会收集这些数据,我认为它不直接支持这些数据所需的速度和踏频传感器。有第三方应用程序可能会收集这些数据。

标签: android google-fit


【解决方案1】:

我不确定骑自行车的数据,但你可以得到这样的自行车类型数据:

      DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
            .bucketByTime(1, TimeUnit.DAYS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    PendingResult<DataReadResult> pendingResult = Fitness.HistoryApi.readData(client, readRequest);

    DataReadResult dataReadResult = pendingResult.await(60, TimeUnit.SECONDS);
    Log.d(TAG, "Retrieved results: " + dataReadResult);
    if (dataReadResult.getStatus().isSuccess()) {
        if (dataReadResult.getBuckets().size() > 0) {

            for (Bucket bucket : dataReadResult.getBuckets()) {

                List<DataSet> dataSets = bucket.getDataSets();
                Log.d(TAG, "getFitHistoryByTime: Activity " + bucket.getActivity());
                Log.d(TAG, "getFitHistoryByTime: Start - End  "
                        + dateFormat.format(bucket.getStartTime(TimeUnit.MILLISECONDS))
                        + " - "
                        + dateFormat.format(bucket.getEndTime(TimeUnit.MILLISECONDS)));
                for (DataSet dataSet : dataSets) {
                    Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName());
                    for (DataPoint dp : dataSet.getDataPoints()) {

                         if (dp.getDataType().equals(DataType.AGGREGATE_ACTIVITY_SUMMARY)) {
                            boolean activityToAdd = false;
                            ActivitiesData activitiesData = new ActivitiesData();
                            for (Field field : dp.getDataType().getFields()) {
                                if (Field.FIELD_ACTIVITY.equals(field)) {
                                    int activityType = dp.getValue(field).asInt();
                                    Log.d(TAG, "getFitHistoryByTime: activity type " + activityType);
                                    if (FitnessActivities.getName(activityType).equals("biking")) {
                                        activityToAdd = true;
                                        Log.d(TAG, "getFitHistoryByTime: added activity: " + FitnessActivities.getName(activityType));

                                    }
                                }

                                if (Field.FIELD_DURATION.equals(field)) {
                                    long duration = dp.getValue(field).asInt();  
                                }
                            }
                        }
                    }
                }


            .....

也许你会根据这段代码 sn-p 得到这个想法。 另外,请尝试在 Google Fit G+ community 上发布此问题。

亲切的问候。 MB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多