Intereting Posts
Проблемы при захвате нескольких фотографий: приложение перестает отвечать на запросы, просмотр камеры становится зеленым, и изображение не сохраняется Android – Как остановить загрузку изображений в Recyclerview при прокрутке Установите равную ширину столбцов в макете таблицы в Android Android Studio создает шаблон проекта для новых проектов Разрешенные версии для приложения (22.0.0) и тестового приложения (21.0.3) отличаются Рисование кругового таймера (AndEngine) Темный текст на темном фоне в AlertDialog с Theme.Sherlock.Light Отладка с использованием виртуальной машины, такой как VMWare / VirtualBox? Как я могу использовать layout_weight в представлении элементов RecyclerView или ListView, чтобы элементы с равной высотой заполняли доступное пространство на экране? Публикация фотографии из родного ShareDialog в Facebook и Android SDK Почему библиотечный модуль android.support.test не отображается в зависимости от зависимостей Установка звукового файла в качестве мелодии звонка Как использовать Actions from Notification без начала действия Nexus 6 и MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING); Невозможно получить доступ к zzbql в Firebase

Android API IsConnected возвращает TRUE после выхода из системы

Я разрабатываю игру для Android с помощью Google Play Game Services, используя Xamarin. Я делаю свое тестирование с помощью эмулятора Android Genymotion. Я столкнулся с проблемой, которая, по-видимому, является ошибкой в ​​реализации Google Play или Xamarin.

Если я выхожу из учетной записи Google , вызовы в IGoogleApiClient.IsConnected () продолжают возвращать true (хотя я явно только что выписал). Если я попытаюсь использовать этот объект API, я получу исключения:

Java.lang.SecurityException: не подписан при вызове API

Например, следующий код приводит к вышеуказанному исключению, если он выполняется после выписки:

public void StartNewMatch() { if (!mGoogleApiClient.IsConnected) { return; } Intent intent = GamesClass.TurnBasedMultiplayer.GetSelectOpponentsIntent(mGoogleApiClient, 1, 1, true); StartActivityForResult(intent, RC_SELECT_PLAYERS); } 

Я выхожу из папки «Входящие» в Google Play (сборщик матчей); Как показано на рисунках ниже.

Кто-нибудь сталкивался с этим раньше? Я что-то упускаю? Есть какие-то проблемы?

Примечание. Это происходит только при выходе из пользовательского интерфейса Google. Если я вручную mGoogleApiClient.Disconnect() пользователь, с чем-то вроде mGoogleApiClient.Disconnect() , проблема не возникает; mGoogleApiClient.IsConnected() теперь возвращает false (как и ожидалось).

Введите описание изображения здесь

Введите описание изображения здесь

Введите описание изображения здесь

Solutions Collecting From Web of "Android API IsConnected возвращает TRUE после выхода из системы"

Чтобы синхронизировать состояние входа в систему, вы ДОЛЖНЫ реализовать onActivityResult правильно.

Это должно выглядеть следующим образом:

ПРИМЕЧАНИЕ: это Java-код, я не уверен, как это будет выглядеть точно с помощью Xamarin, но, надеюсь, вы сможете это понять 🙂

 @Override protected void onActivityResult(int requestCode, int responseCode, Intent data) { // check for "inconsistent state" if ( responseCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED && requestCode == <your_request_code_here> ) { // force a disconnect to sync up state, ensuring that mClient reports "not connected" mGoogleApiClient.disconnect(); } } 

ПРИМЕЧАНИЕ: просто убедитесь, что вы заменили в коде код запроса, который вы использовали. Вам может потребоваться также проверить коды нескольких запросов.

Если вы используете классы gameHelper из библиотеки BaseGameUtils (проще в использовании), вы можете изменить приведенный выше код:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); gameHelper.onActivityResult(requestCode, resultCode, data); if (resultCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED){ // force a disconnect to sync up state, ensuring that mClient reports "not connected" gameHelper.getApiClient().disconnect(); } }