Intereting Posts
Как правильно выравнивать текст в текстовом или Android-тексте Android? Android: android.content.res.Resources $ NotFoundException: Идентификатор ресурса строки # 0x5 Отображение дат в локализованном формате на Android StaggeredGridLayoutManager и движущиеся объекты Как я могу выполнить элемент проверки в Chrome на своем устройстве Android Galaxy S3? Как распечатать текстовый файл с помощью WiFi Direct Android удаление файла из внутреннего хранилища Проверка подписки на сообщение о покупке приложения для Android в Python в Google App Engine Как проверить системную версию Android? Как использовать AutoValue с Retrofit 2? Instagram от Android открыта для определенного пользователя и добавляет подпись к загруженному изображению Android – android.os.NetworkOnMainThreadException Переместить существующее веб-приложение в собственное приложение для телефона с помощью обозревателя браузера Dagger2 не генерирует файлы «Dagger_» ImeOptions "actionNext" программно – как перейти к следующему полю?

GoogleApiClient бросает «GoogleApiClient еще не подключен» ПОСЛЕ ONConnected функция вызова

Поэтому я нашел кое-что, что не очень ясно для меня о GoogleApiClient. У GoogleApiClient есть функция, называемая onConnected, которая запускается при подключении клиента (точно)

Я получил свою собственную функцию: startLocationListening, которая в конечном итоге вызвана функцией onConnected GoogleApiClient .

Таким образом, моя функция startLocationListening не могла работать без соединения GoogleApiClient.

Код и журнал:

@Override public void onConnected(Bundle bundle) { log("Google_Api_Client:connected."); initLocationRequest(); startLocationListening(); //Exception caught inside this function } 

 private void startLocationListening() { log("Starting_location_listening:now"); //Exception caught here below: LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } 

Исключением является:

 03-30 12:23:28.947: E/AndroidRuntime(4936): java.lang.IllegalStateException: GoogleApiClient is not connected yet. 03-30 12:23:28.947: E/AndroidRuntime(4936): at com.google.android.gms.internal.jx.a(Unknown Source) 03-30 12:23:28.947: E/AndroidRuntime(4936): at com.google.android.gms.common.api.cb(Unknown Source) 03-30 12:23:28.947: E/AndroidRuntime(4936): at com.google.android.gms.internal.nf.requestLocationUpdates(Unknown Source) 03-30 12:23:28.947: E/AndroidRuntime(4936): at hu.company.testproject.service.GpsService.startLocationListening(GpsService.java:169) 03-30 12:23:28.947: E/AndroidRuntime(4936): at hu.company.testproject.service.GpsService.onConnected(GpsService.java:259) 

Мой журнал отладки также говорит, что функция onConnected получила вызов :

 03-30 12:23:28.847: I/Locationing_GpsService(4936): Google_Api_Client:connected. 03-30 12:23:28.857: I/Locationing_GpsService(4936): initLocationRequest:initing_now 03-30 12:23:28.877: I/Locationing_GpsService(4936): initLocationRequest:interval_5000 03-30 12:23:28.897: I/Locationing_GpsService(4936): initLocationRequest:priority_100 03-30 12:23:28.917: I/Locationing_GpsService(4936): Starting_location_listening:now 

После этого я получил исключение.

Я что-то упустил? Я получил ответ на «подключен», я запустил мой func, и я получил сообщение об ошибке «не подключено», что это? Плюс одна раздражающая вещь: я использовал эту службу определения местоположения в течение нескольких недель и никогда не получал эту ошибку.

РЕДАКТИРОВАТЬ :

Я добавил более конкретный вывод журнала, просто взорвал мой разум, проверьте это:

 @Override public void onConnected(Bundle bundle) { if(mGoogleApiClient.isConnected()){ log("Google_Api_Client: It was connected on (onConnected) function, working as it should."); } else{ log("Google_Api_Client: It was NOT connected on (onConnected) function, It is definetly bugged."); } initLocationRequest(); startLocationListening(); } 

Выход журнала в этом случае:

 03-30 16:20:00.950: I/Locationing_GpsService(16608): Google_Api_Client:connected. 03-30 16:20:00.960: I/Locationing_GpsService(16608): Google_Api_Client: It was NOT connected on (onConnected) function, It is definetly bugged. 

Да, я только что получил mGoogleApiClient.isConnected() == false внутри onConnected() как это возможно?

РЕДАКТИРОВАТЬ:

Поскольку никто не мог ответить на это даже с благодарностью за репутацию, я решил сообщить об этом как об ошибке для Google. То, что потом произошло, действительно удивило меня. Официальный ответ Google на мой отчет:

«Этот веб-сайт предназначен для разработчиков с исходным кодом AOSP Android и набором инструментов разработчика, а не приложениями Google или службами, такими как Службы воспроизведения, GMS или API Google. К сожалению, похоже, что нет подходящего места для сообщения об ошибках в Play Services Все, что я могу сказать, это то, что этот веб-сайт не так, извините. Попробуйте опубликовать на форумах продуктов Google ».

Полный отчет о выпуске здесь. (Надеюсь, они не удалят его только потому, что его глупо)

Так что да, я посмотрел на Google Product Forums и просто купил любую тему, чтобы опубликовать эту штуку, поэтому на данный момент ям озадачен и застрял.

Может ли кто-нибудь на планете Земля помочь мне с этим?

РЕДАКТИРОВАТЬ:

Полный код в pastebin

Solutions Collecting From Web of "GoogleApiClient бросает «GoogleApiClient еще не подключен» ПОСЛЕ ONConnected функция вызова"

Я просто заметил, что вы создаете googleApiClient в onStartCommand (). Это кажется плохой идеей.

Предположим, что ваш сервис запускается дважды. Два объекта googleApiClient будут созданы, но вы будете иметь только ссылку на один. Если тот, чья ссылка у вас нет, выполняет обратный вызов onConnected (), вы будете подключены к этому клиенту, но клиент, чья ссылка, которую вы действительно делаете, все еще может быть отключена.

Я подозреваю, что это то, что происходит. Попробуйте переместить создание googleApiClient в onCreate и посмотреть, получилось ли у вас такое же поведение.

У меня была такая же ошибка, но моя проблема отличалась от ответа iheanyl:

Я объявил статику googleApiClient. Это помешало андроиду отключить службу.

https://developer.android.com/reference/com/google/android/gms/common/api/GoogleApiClient.html

Вы должны создать экземпляр объекта клиента в методе onCreate (Bundle) Activity Activity, а затем вызвать connect () в onStart () и отключить () в onStop () независимо от состояния.

Реализация GoogleApiClient создается только для одного экземпляра. Лучше всего создать экземпляр только один раз в onCreate, а затем выполнить соединения и отключения, используя один экземпляр.

Вызов метода connect () в методе onStart ()

  @Override protected void onStart() { super.onStart(); // Call GoogleApiClient connection when starting the Activity googleApiClient.connect(); } @Override protected void onStop() { super.onStop(); // Disconnect GoogleApiClient when stopping Activity googleApiClient.disconnect(); } 

У меня была эта проблема, когда я случайно, но googleApiClient.connect () в oncreate и onresume. Просто удалил его из oncreate.

Перемещение создания googleApi в onCreate разрешило проблему для меня.