2016-11-08 2 views
0

Я хочу написать приложение, которое отображает все шаги, выполненные на этой неделе, задав API Google Fit. К сожалению, мой вызов API истории всегда возвращает пустые DataSets.Google Fit история счетчика шагов ничего не возвращает

Для отладки я использую планшет Nexus 9 с установленным Google Fit. Я добавил шаги вручную в приложении Google Fit.

Это мой код, чтобы получить шаги

OnCreate:

... 
mApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Fitness.SENSORS_API) 
      .addApi(Fitness.RECORDING_API) 
      .addApi(Fitness.HISTORY_API) 
      .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 
... 

Функции, чтобы получить шаги

private void showSteps() { 
    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(); 

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

    DataReadResult dataReadResult = Fitness.HistoryApi.readData(mApiClient, readRequest).await(1, TimeUnit.MINUTES); 


    if (dataReadResult.getBuckets().size() > 0) { 
     Log.i(TAG, "Number of returned buckets of DataSets is: " 
       + dataReadResult.getBuckets().size()); 
     for (Bucket bucket : dataReadResult.getBuckets()) { 
      List<DataSet> dataSets = bucket.getDataSets(); 
      for (DataSet dataSet : dataSets) { 
       Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName()); 
       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

       for (DataPoint dp : dataSet.getDataPoints()) { 
        Log.i(TAG, "Data point:"); 
        Log.i(TAG, "\tType: " + dp.getDataType().getName()); 
        Log.i(TAG, "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS))); 
        Log.i(TAG, "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS))); 
        for(Field field : dp.getDataType().getFields()) { 
         Log.i(TAG, "\tField: " + field.getName() + 
           " Value: " + dp.getValue(field)); 
        } 
       } 
      } 
     } 
    } else if (dataReadResult.getDataSets().size() > 0) { 
     Log.i(TAG, "Number of returned DataSets is: " 
       + dataReadResult.getDataSets().size()); 
     for (DataSet dataSet : dataReadResult.getDataSets()) { 
      Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName()); 
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

      for (DataPoint dp : dataSet.getDataPoints()) { 
       Log.i(TAG, "Data point:"); 
       Log.i(TAG, "\tType: " + dp.getDataType().getName()); 
       Log.i(TAG, "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS))); 
       Log.i(TAG, "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS))); 
       for (Field field : dp.getDataType().getFields()) { 
        Log.i(TAG, "\tField: " + field.getName() + 
          " Value: " + dp.getValue(field)); 
       } 
      } 
     } 
    } 

я получаю ведро, и они имеют DataSets, но они никогда не имеют никаких точек данных. Код просто заканчивается без ошибок. ApiClient возвращает, что он действительно связан с Google Fit.

Почему API истории не возвращает мои шаги, которые я добавил в приложение Google Fit?

Заранее благодарен!

ответ

0

Как оказалось, код был в порядке. Я заметил, что когда я добавил шаги, я вошел в другую учетную запись google на своем планшете. Очевидно, что учетная запись должна быть одинаковой.

+0

Привет, приятель, вам нужно, чтобы на вашем устройстве было установлено приложение google, подходящее для получения данных истории, или оно просто работает без него. –

+0

работает без приложения google;) – MikeB

+0

Спасибо, и еще одна вещь относительно данных, которые Api дает нам . Предоставляет ли он данные, которые были написаны (вставлены) в api клиентом или он дает фактическое количество, которое посетил пользователь, если мы не вносим ничего в Fit api вручную. –

Смежные вопросы