GoogleApiClient setAccountName не работает в Службе

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

В моем приложении я должен поддерживать постоянный доступ к API, и поэтому я инициирую свой клиент google в службе и пытаюсь сделать запросы к данным Google Fit от службы. Инициализация выглядит следующим образом:

         public class MyService extends Service  {
....
....
....
protected synchronized void buildGoogleApiClient() {
            mGoogleApiClient
                    = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
    // automanage can not be used in Service, so it is disabled.
    //                .enableAutoManage(
    //
    //                /* FragmentActivity */
    //                                  new FragmentActivity(),
    //                        this /* OnConnectionFailedListener */)
                    .addApi(ActivityRecognition.API)
                    .addApi(Fitness.RECORDING_API)
                    .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
                    .addApi(Fitness.HISTORY_API)
                    .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
                    .setAccountName("myemail@gmail.com")
                    .build();
        }
.....
.....
}

И когда я делаю это, я получаю следующую ошибку:

 I/fitapi: Google Play services connection failed. Cause: ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{1887aff: android.os.BinderProxy@1cd040cc}, message=null}

Явно то .setAccountName (String) не работал, как подразумевается сообщением об ошибке.

Мой вопрос заключается в следующем: как мне войти в систему из службы if .setAccountName не работает?

Делаю то .enableAutoManage () из основного действия работает, но это не позволяет фоновым процессам продолжать сбор данных о пригодности.
Очевидно.enableAutoManage () не будет работать в службе, поскольку служба не выполняется в потоке пользовательского интерфейса.

Любая помощь будет оценена.Спасибо.

1 ответ

  1. Я понял это. Проблема заключалась в том, что имя пакета не было зарегистрировано в консоли Google API. Очень распространенная ошибка, которую нетривиально отлаживать. Мораль истории? Внимательно прочитайте документацию и официальные инструкции .