2016-07-05 4 views
3

Я пытаюсь внедрить Google Fit Listener, когда данные обновляются в сервисах Google Fit.Google Fit Слушайте обновление данных не работает

В этом link of Google Fit documentation есть простой пример, однако он не является на 100% понятным. По этой причине, у меня есть две проблемы:

  1. я не знаю, как реализовать mResultCallback переменных (нет никаких примеров в этой документации).
  2. Когда я определяю простой ResultCallback (это, кажется, работает, но я не уверен), и я запустить приложение, оно дает мне код ошибки Результат: java.lang.SecurityException: проверка подписи не удалось

ответ

2

Код в списке HistortyApi содержит один из параметров android.permission.ACCESS_FINE_LOCATION или android.permission.BODY_SENSORS как необходимый.

Добавление этих разрешений к моему коду не разрешило одну и ту же проблему.

Подтвержденная ошибка в сервисах Google Fit. См. Обсуждение в https://plus.google.com/110141422948118561903/posts/Lqri4LVR7cD

+0

Как это все еще сломано ... –

0

mResultCallback - результат ResultCallback < Статус >, поэтому вам нужно реализовать класс этого типа. Документация here, но есть только один метод, который вы должны реализовать:

public abstract void onResult (Status result) 

Стандартный способ сделать это, используя анонимный класс либо при объявлении mResultCallback или когда вы используете его в качестве параметра. Ниже приведен пример из примера BasicRecordingAPI Google:

Fitness.RecordingApi.subscribe(mClient, DataType.TYPE_ACTIVITY_SAMPLE) 
    .setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(Status status) { 
      if (status.isSuccess()) { 
       if (status.getStatusCode() 
         == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) { 
        Log.i(TAG, "Existing subscription for activity detected."); 
       } else { 
        Log.i(TAG, "Successfully subscribed!"); 
       } 
      } else { 
       Log.i(TAG, "There was a problem subscribing."); 
      } 
     } 
}); 

Если вы хотите использовать переменную-член, вы можете просто сделать задание вместо:

ResultCallback<Status> mResultCallback = new ResultCallback<Status>() { 
    @Override 
    public void onResult(Status status) { 
     ... 
    } 
}); 

Конечно, вы можете определить, не-анонимный класс, но если вы сделали это за каждый обратный вызов, который у вас был, вы в конечном итоге создали бы много классов.

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