2016-01-27 2 views
0

Используя такой код, вы можете связать мое приложение и использовать учетную запись.Выход из GoogleApiClient в приложении для Android

if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Plus.API) 
        .addApi(Drive.API) 
        .addScope(Drive.SCOPE_FILE) 
        .addScope(Drive.SCOPE_APPFOLDER) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 
     } 
     mGoogleApiClient.connect(); 

Но есть ли способ «выйти» из этой учетной записи после активации или перейти на новую?

+0

Auth.GoogleSignInApi.signOut (mGoogleApiClient); – Kushal

ответ

5

Я нашел это уточненный решение:

if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { 
         mGoogleApiClient.clearDefaultAccountAndReconnect().setResultCallback(new ResultCallback<Status>() { 

          @Override 
          public void onResult(Status status) { 

           mGoogleApiClient.disconnect(); 
          } 
         }); 

        } 

Использование

Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 

осуждается

https://developers.google.com/android/reference/com/google/android/gms/plus/Account

0

EDIT

Этот метод является DEPRECATED

Используйте как этот

if (mGoogleApiClient != null) 
      { 
       if (mGoogleApiClient.isConnected()) 
       { 
        Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 

        mGoogleApiClient.disconnect(); 
       } 
      } 
7

clearDefaultAccount() не работает. Для выйти и очистить выбранное использование аккаунта Auth.GoogleSignInApi.signOut() как этот:

private GoogleApiClient mGoogleApiClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Build a GoogleApiClient with access to the Google Sign-In API and the 
    // options specified by gso. 
    mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext()) //Use app context to prevent leaks using activity 
      //.enableAutoManage(this /* FragmentActivity */, connectionFailedListener) 
      .addApi(Auth.GOOGLE_SIGN_IN_API) 
      .build(); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 
} 

private void signOut() { 
    if (mGoogleApiClient.isConnected()) { 
     Auth.GoogleSignInApi.signOut(mGoogleApiClient); 
     mGoogleApiClient.disconnect(); 
     mGoogleApiClient.connect(); 
    } 
} 
+0

Можете ли вы объяснить, почему это работает? – mrid

+0

Что я мог бы придумать, вы используете 'GoogleSignInApi' для входа, которому нужен экземпляр' GoogleApiClient', и вы должны быть подключены для правильной работы. Чтобы действительно отключить свою учетную запись, вы должны выписать из GoogleSignInApi' свой экземпляр «GoogleApiClient» и снова подключиться. – Gonzalo

+0

@Gonzalo Почему вы добавили 'mGoogleApiClient.disconnect();' и 'mGoogleApiClient.connect();' in' signOut() 'метод? 'Auth.GoogleSignInApi.signOut (mGoogleApiClient);' недостаточно? –