Bir süredir bununla güreşim - ve burada kapsamlı cevaplar aradım ama bulamadım. bir çözüm kaçırdı. Cihaz yönünü değiştirirken, "Google ile giriş yap" düğmesini/mantığını uyguluyorum ve tüm çalışmalar gayet iyi. Bu durumda, Google'ın izinler iletişim kutusunun birden çok kopyasını sundum. (Yani üç kez yön değiştirirseniz, orijinal ekrana geri dönmeden önce iptal etmek zorunda olduğum izin iletişim kutusunun üç kopyası vardır). (İzin iletişim kutusunun bir örneği here bulunabilir).Çoklu İzinler Android'de Dialog'ları Kullanarak oryantasyon değiştirdikten sonra Google ile giriş yapın
Kodun aşırı karmaşık olduğunu düşünmüştüm, bu yüzden Google'ın öğretici sayfalarındaki (Getting Started/Sign-In) koddan başka hiçbir şeyle yeni bir etkinlik yaptım ve hala aynı sorunu yaşıyorum. (Aşağıdaki kodu)
(FWIW, ben de intellij yönettiği "Yeni -> Etkinlik -> Giriş Etkinliği" kullanarak yeni Etkinliği oluşturma çalıştı. Aynı sonuçlarla, seçeneği)
Ayrıca buna, ben Google'ın "Quickstart" uygulamasını çalıştırmayı denedi ve evet, aynı sorun hala devam ediyor!
Başarıyla "Başarıyla Google'la oturum aç" bu davranışını uyguladı mı? Son çare olarak, kimlik doğrulama etkinliğimi her zaman dikey olarak göstermeye zorlayabilirim, ancak bunun ötesinde bir çözüm olup olmadığını görmeye çalışıyorum.
Teşekkürler! çözünürlüğü sadece bir kez, düzgün ateş ediliyor, böylece
package com.myapp.test.view.housekeeping;
import android.content.Intent;
import android.content.IntentSender;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Toast;
import com.myapp.test.R;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.plus.Plus;
public class AuthenticateActivity_BareBones extends ActionBarActivity
implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
/* Request code used to invoke sign in user interactions. */
private static final int RC_SIGN_IN = 1;
/* Client used to interact with Google APIs. */
private GoogleApiClient mGoogleApiClient;
/* A flag indicating that a PendingIntent is in progress and prevents
* us from starting further intents.
*/
private boolean mIntentInProgress;
/* Track whether the sign-in button has been clicked so that we know to resolve
* all issues preventing sign-in without waiting.
*/
private boolean mSignInClicked;
/* Store the connection result from onConnectionFailed callbacks so that we can
* resolve them when the user clicks sign-in.
*/
private ConnectionResult mConnectionResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_authenticate);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API)
.addScope(Plus.SCOPE_PLUS_LOGIN)
.build();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RC_SIGN_IN:
if (resultCode != RESULT_OK) {
mSignInClicked = false;
}
mIntentInProgress = false;
if (!mGoogleApiClient.isConnecting()) {
mGoogleApiClient.connect();
}
break;
}
}
public void onButtonClick(View view) {
int id = view.getId();
switch (id) {
case R.id.login_authenticate_google_button:
if (!mGoogleApiClient.isConnecting()) {
mSignInClicked = true;
resolveSignInError();
}
break;
}
}
@Override
public void onConnected(Bundle connectionHint) {
// We've resolved any connection errors. mGoogleApiClient can be used to
// access Google APIs on behalf of the user.
mSignInClicked = false;
Toast.makeText(this, "Connected to Google!", Toast.LENGTH_SHORT).show();
}
@Override
public void onConnectionSuspended(int cause) {
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if (!mIntentInProgress) {
// Store the ConnectionResult so that we can use it later when the user clicks
// 'sign-in'.
mConnectionResult = result;
if (mSignInClicked) {
// The user has already clicked 'sign-in' so we attempt to resolve all
// errors until the user is signed in, or they cancel.
resolveSignInError();
}
}
}
/* A helper method to resolve the current ConnectionResult error. */
private void resolveSignInError() {
if (mConnectionResult.hasResolution()) {
try {
mIntentInProgress = true;
startIntentSenderForResult(mConnectionResult.getResolution().getIntentSender(),
RC_SIGN_IN, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
// The intent was canceled before it was sent. Return to the default
// state and attempt to connect to get an updated ConnectionResult.
mIntentInProgress = false;
mGoogleApiClient.connect();
}
}
}
}
Bu sorun hâlâ yeni Google Play Services lib 7.0.1 sürümünde bulunmaktadır (ve bunları örnekler uygulamasıyla kolayca çoğaltabilirsiniz). Yazdıklarınıza ek olarak, sorun hesap seçici diyalogunda da gerçekleşir. @QuantumSheep Bunun için bir çözüm buldunuz mu? – AZ13