Intereting Posts
Можно ли использовать proguard в режиме отладки? Android Hide Soft Keyboard от EditText, не теряя курсора Ошибка: не удалось найти цель с хэш-строкой 'android-21' Изменение формы уведомления HTTPS-запрос зависает только на API Android ниже 20, даже с установленным тайм-аутом подключения В AVD-эмуляторе, как увидеть папку sdcard? И установить apk в AVD? Какой выпуск Java используется в Android J2ME или Java SE? Какую версию Eclipse я использую для Android? USER_PRESENT Предназначение для GO Locker Устройство ADB для Android запрещено Android 6.0 требует перезагрузки после предоставления разрешения пользователя во время выполнения Добавление новых маркеров на карту с помощью ящика кластера не отражает изменений до тех пор, пока я не увеличу масштаб и не уменьшу карту Как отобразить представление списка в диалоговом окне Android Alert? Использование диалогов и действий Удаление вызова журнала с помощью proguard

Как заставить AccountManager отображать экран «Запрос доступа» после того, как пользователь уже разрешил доступ?

При использовании AccountManager :: getAuthTokenByFeatures отображается экран запроса доступа, позволяющий пользователю разрешить или запретить доступ к учетной записи. После того, как пользователь разрешает доступ, последующие вызовы (с теми же аргументами) возвращают токен auth без запроса пользователя.

Как очистить состояние, чтобы убедиться, что появится запрос на запрос доступа? (Это было бы полезно, по крайней мере, для целей разработки, тестирования и демонстрации.)

Solutions Collecting From Web of "Как заставить AccountManager отображать экран «Запрос доступа» после того, как пользователь уже разрешил доступ?"

Единственное решение, которое я нашел, – это вручную очистить данные, хранящиеся в учетной записи системы. Db. Выполните следующие действия из командной строки, чтобы удалить все учетные гранты в системе.

Для эмулятора:

adb -e shell 'sqlite3 /data/system/accounts.db "delete from grants;"' 

Для устройства (должно быть внедрено и установлено бинарное средство sqlite3):

 adb -d shell 'echo sqlite3 /data/system/accounts.db \"delete from grants\;\" | su' 

Я создал новую учетную запись, которую я использую для тестирования. Новая учетная запись всегда запрашивает запрос доступа. Не забудьте НЕ разрешить доступ.

Чтобы проверить экран входа в систему, измените пароль для учетной записи с другого устройства / ПК.

Использование сервисов Google Play:

http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html

Добавьте https://www.googleapis.com/auth/userinfo.profile в свою область действия.

Пример:

 String scope="oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile" final String token = GoogleAuthUtil.getToken(context, "xxxx@gmail.com", scope); 

ИЛИ "грубая сила"

 Intent res = new Intent(); res.addCategory("account:xxxx@gmail.com"); res.addCategory("scope:oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"); res.putExtra("service", "oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"); Bundle extra= new Bundle(); extra.putString("androidPackageName","com.your.package"); res.putExtra("callerExtras",extra); res.putExtra("androidPackageName","com.your.package"); res.putExtra("authAccount","xxxx@gmail.com"); String mPackage = "com.google.android.gms"; String mClass = "com.google.android.gms.auth.TokenActivity"; res.setComponent(new ComponentName(mPackage,mClass)); startActivityForResult(res,100); за Intent res = new Intent(); res.addCategory("account:xxxx@gmail.com"); res.addCategory("scope:oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"); res.putExtra("service", "oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"); Bundle extra= new Bundle(); extra.putString("androidPackageName","com.your.package"); res.putExtra("callerExtras",extra); res.putExtra("androidPackageName","com.your.package"); res.putExtra("authAccount","xxxx@gmail.com"); String mPackage = "com.google.android.gms"; String mClass = "com.google.android.gms.auth.TokenActivity"; res.setComponent(new ComponentName(mPackage,mClass)); startActivityForResult(res,100); 

Теперь, когда вы отменили доступ здесь https://accounts.google.com/IssuedAuthSubTokens, приложение снова отобразит окно для разрешения на устройстве.

В моем случае, что говорит Бенн Сандовал, это не сработает.

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

 if (googleApiClient != null && !googleApiClient.isConnecting() && googleApiClient.isConnected()){ googleApiClient.clearDefaultAccountAndReconnect(); Plus.AccountApi.revokeAccessAndDisconnect(googleApiClient).setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status status) { Log.i("google+", "Google+ user access revoked"); googleApiClient.connect(); } }); } 

Для этого мне снова задавали вопрос о предоставлении разрешений для google +