2016-06-21 3 views
1

У меня есть сервис в моем приложении для Android, который я использую для подсчета шагов. Я фитнес и история api для получения ежедневных и еженедельных шагов. Все работало правильно, до тех пор, пока количество шагов не будет всегда 0! Приложение, кажется, подключиться к фитнес-апи, используя код вышеAPI Google Fitness API для шагов

private void buildFitnessClient() { 
    mGoogleApiFitnessClient = new GoogleApiClient.Builder(this) 
      .addApi(Fitness.SENSORS_API) 
      .addApi(Fitness.HISTORY_API) 
      .addApi(Fitness.RECORDING_API) 
      .addScope(new Scope(Scopes.FITNESS_BODY_READ_WRITE)) 
      .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
      .addScope(new Scope(Scopes.FITNESS_LOCATION_READ_WRITE)) 
      .addConnectionCallbacks(
        new GoogleApiClient.ConnectionCallbacks() { 
         @Override 
         public void onConnected(Bundle bundle) { 
          Log.i(TAG, "Google Fit connected."); 
          mTryingToConnect = false; 
          Log.d(TAG, "Notifying the UI that we're connected."); 
          notifyUiFitConnected(); 

         } 

         @Override 
         public void onConnectionSuspended(int i) { 
          mTryingToConnect = false; 
          if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) { 
           Log.i(TAG, "Google Fit Connection lost. Cause: Network Lost."); 
          } else if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) { 
           Log.i(TAG, "Google Fit Connection lost. Reason: Service Disconnected"); 
          } 
         } 
        } 
      ) 
      .addOnConnectionFailedListener(
        new GoogleApiClient.OnConnectionFailedListener() { 
         // Called whenever the API client fails to connect. 
         @Override 
         public void onConnectionFailed(ConnectionResult result) { 
          mTryingToConnect = false; 
          notifyUiFailedConnection(result); 
         } 
        } 
      ) 
      .build(); 
} 

в то время как для того, чтобы восстановить ежедневные шаги я использовать эту функцию

private void getStepsToday() { 
    Calendar cal = Calendar.getInstance(); 
    Date now = new Date(); 

    cal.set(Calendar.HOUR_OF_DAY, 23); 
    cal.set(Calendar.MINUTE, 59); 
    cal.set(Calendar.SECOND, 59); 
    long endTime = cal.getTimeInMillis(); 

    cal.setTime(now); 
    cal.set(Calendar.HOUR_OF_DAY, 0); 
    cal.set(Calendar.MINUTE, 0); 
    cal.set(Calendar.SECOND, 0); 
    long startTime = cal.getTimeInMillis(); 

    DebugLogger.debug("Value of startTime = "+startTime+" - endTime = "+endTime); 
    DebugLogger.debug("Test for getting steps "+getStepsCount(startTime,endTime)); 

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

    DataReadResult dataReadResult = Fitness.HistoryApi.readData(mGoogleApiFitnessClient, readRequest).await(1, TimeUnit.MINUTES); 
    DataSet stepData = dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA); 


    int totalSteps = 0; 
    DebugLogger.debug("GetStepsToday - Size in for loop "+stepData.getDataPoints().size()); 
    for (DataPoint dp : stepData.getDataPoints()) { 
     for(Field field : dp.getDataType().getFields()) { 
      int steps = dp.getValue(field).asInt(); 
      DebugLogger.debug("GoogleFit Service - debugging - steps count "+steps); 
      totalSteps += steps; 
     } 
    } 
    publishTodaysStepData(totalSteps, getGoalStep(goalEnabledDate)); 
} 

Как я уже говорил все работает нормально, но внезапно stepData.getDataPoints() размер всегда 0 возвращает мне 0 шагов. Я создал новый ключ Клятвы для моего отладки и создания хранилища ключей, я даже изменил имя своего приложения и заново создал проект в консоли Android API, но ничего. Есть ли что-нибудь, что я должен изменить в разрешениях или что-то еще? Мне нужно объявить свой ключ в любом месте приложения?

+0

Это может помочь http://www.gadgetsaint.com/android/google-fit-steps-calories-android/#.WESRX6J97BJ – ASP

ответ

0

Проверьте версию услуг Google Play на своем устройстве и убедитесь, что у вас есть последняя клиентская библиотека для сервисов Google Play на вашем хосте разработки.

apply plugin: 'com.android.application' 
... 

dependencies { 
compile 'com.google.android.gms:play-services-fitness:9.0.1' 
} 
  • Откройте Менеджер Android SDK.
  • В разделе «Дополнительно» найдите службы Google Play и Google Repository.
  • Если статус для этих пакетов отличается от установленного, выберите их оба и нажмите «Установить пакеты».

Кроме того, проверьте в Google Developers Console, если APIs и Auth быть установлен.

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