5

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(); 
      } 
     } 
    } 
} 
+0

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

cevap

0

mSignInClicked aslında bu kodda sizin için rotasyon durumda koruyor: Aşağıdaki

benim "basitleştirilmiş" Etkinliğinizden benim kodudur. Birden çok kez yeniden görüntülenen Hesap Seçici iletişim kutusuyla aynı davranışı alıyorum.

Bu, Google Play Hizmetleri'nin 7 numaralı sürümünde bir hataya benziyor - bu akış yukarı bir dosyaya kaydedilecek ve umarım gelecekte izlenecek bir sürümde dikkate alınmalıdır.

İlgili konular