简体   繁体   English

如何使用readDailyTotal从Google Fit History API中读取循环和运行数据

[英]How to read cycling and running data from Google Fit History API using readDailyTotal

I'm trying to read daily data from Fitness History Api with method readDailyTotal . 我正在尝试使用方法readDailyTotal从Fitness History Api读取每日数据。 I want to read steps, cycling and running. 我想阅读步骤,骑自行车和跑步。 I have implemented steps successfully but i can't get daily result for cycling and running. 我已经成功实施了步骤,但我无法获得骑行和跑步的每日结果。

This is code which i'm using to get steps and it works: 这是我用来获取步骤的代码,它可以工作:

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, "---------------------------------");
                }
              }
          } 
      }
});

I tried to use same code but for cycling: 我尝试使用相同的代码,但骑自行车:

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

also i tried to use different DataType like: TYPE_CYCLING_PEDALING_CADENCE , TYPE_CYCLING_PEDALING_CUMULATIVE , TYPE_CYCLING_WHEEL_REVOLUTION 我也尝试使用不同的数据类型,如: TYPE_CYCLING_PEDALING_CADENCETYPE_CYCLING_PEDALING_CUMULATIVETYPE_CYCLING_WHEEL_REVOLUTION

and it doesn't work. 它不起作用。 I read whole Fitness Fit documentation as well, and i didn't get how to do that. 我也阅读了整个Fitness Fit文档,但我没有得到如何做到这一点。

So, my question is how to get daily data for cycling and running? 那么,我的问题是如何获取骑行和跑步的日常数据? And if you could give me some snippet for that, i would be grateful. 如果你能给我一些片段,我将不胜感激。

Thanks :) 谢谢 :)

I'm not sure about cycle pedaling data, but you can get a biking type data like this: 我不确定循环踩踏数据,但你可以获得这样的自行车类型数据:

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


            .....

Perhaps you get the idea based on this code snippet. 也许你会根据这段代码获得想法。 Also, try to post this question on Google Fit G+ community . 另外,请尝试在Google Fit G +社区发布此问题。

Kind regards. 亲切的问候。 MB MB

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM