2016-08-31 3 views
1

Я пытаюсь получить шаги, расстояние, калории из API Google для соответствия. Я использую GoogleApiClient для доступа к данным из Google Fit. я прошу за разрешения Google Fit также позволяет получить доступ ко всем данным из Google Fit:Google Fit Разрешение не предоставлено в первый раз

Это разрешение всплывал приходит каждый раз. Мне нужно разрешить от 4 до 5 раз, тогда я могу получить шаги от Google Fit.

Что мне нужно сделать, чтобы получить разрешение Google Fit в первый раз. Так что, пожалуйста, помогите мне решить эту проблему.

mGoogleApiClient1 = new GoogleApiClient.Builder(this) 
    .addApi(Fitness.HISTORY_API) 
    .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
    .addScope(new Scope(Scopes.FITNESS_BODY_READ_WRITE)) 
    .addScope(new Scope(Scopes.FITNESS_LOCATION_READ_WRITE)) 
    .addConnectionCallbacks(this) 
    .enableAutoManage(this, Constants.googleApi, this) 
    .build(); 

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

// get Steps data from bellow api 
private void getStepDataForToday() { 
    DailyTotalResult result = Fitness.HistoryApi.readDailyTotal(mGoogleApiClient1, DataType.TYPE_STEP_COUNT_DELTA).await(1, TimeUnit.MINUTES); 
    showDataSet(result.getTotal()); 
} 

private void getDistanceDataForToday() { 
    DailyTotalResult result = Fitness.HistoryApi.readDailyTotal(mGoogleApiClient1, DataType.TYPE_DISTANCE_DELTA).await(1, TimeUnit.MINUTES); 
    showDataSet(result.getTotal()); 
} 

private void getCaloriesDataForToday() { 
    DailyTotalResult result = Fitness.HistoryApi.readDailyTotal(mGoogleApiClient1, DataType.TYPE_CALORIES_EXPENDED).await(1, TimeUnit.MINUTES); 
    showDataSet(result.getTotal()); 
} 

Спасибо и ждать помощи

+0

Пожалуйста, сначала отредактируйте свой вопрос, проверьте это: http://stackoverflow.com/help/formatting – neohope

ответ

1

Для Fit разрешения, убедитесь, или дважды проверьте, если вы будете следовать правильно направление в Authorization in Android.

Для получения данных о расстоянии и калориях, которые вы получили, это немного больше, чем оригинальные шаги от Google Fit?

Это указано в FAQ от Google FIT, что:

Из-за того, как обновления Google Fit высвобождаются, это может быть возможно , что приложение Google Fit имеет более позднюю версию анализа наших данных , чем Google Play Services, который выпускается реже.

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

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

Это также может быть вызвано неправильным считыванием источников данных. Для матча значения Google Fit, вы должны читать данные, как это:

DataSource ESTIMATED_STEP_DELTAS = new DataSource.Builder() 
     .setDataType(DataType.TYPE_STEP_COUNT_DELTA) 
     .setType(DataSource.TYPE_DERIVED) 
     .setStreamName("estimated_steps") 
     .setAppPackageName("com.google.android.gms") 
     .build(); 
DataReadRequest readRequest = new DataReadRequest.Builder() 
     .aggregate(ESTIMATED_STEP_DELTAS, DataType.AGGREGATE_STEP_COUNT_DELTA) 
     .aggregate(DataType.TYPE_DISTANCE_DELTA, DataType.AGGREGATE_DISTANCE_DELTA) 
     .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED) 
     .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY) 
     .bucketByTime(1, TimeUnit.DAYS) 
     .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) 
     .build(); 

Для получения дополнительной информации, проверить этот связанный SO question.