Google+ sign out from a different activity

android, android-activity, api, google-api, google-plus

Solution

Just add this on your new activity, where you want your logout-button for google+ to be there :

@Override
protected void onStart() {
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
    mGoogleApiClient.connect();
    super.onStart();
}

and next:

 signout.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
          Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
                  new ResultCallback<Status>() {
                      @Override
                      public void onResult(Status status) {
                          // ...
                          Toast.makeText(getApplicationContext(),"Logged Out",Toast.LENGTH_SHORT).show();
                          Intent i=new Intent(getApplicationContext(),MainActivity.class);
                          startActivity(i);
                      }
                  });
      }
  });

Problem

I have started using the `Google+ API` for android, and I have created a sign-in application following this tutorial: https://developers.google.com/+/mobile/android/sign-in Now, the problem is that I want to create the sign out button from a different `Activity`, and what i tried to do didn't really worked.. My GPlusLogin code (Activity for the Google+ Login): ``` import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import com.google.android.gms.common.*; import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; import com.google.android.gms.plus.PlusClient; public class GPlusLogin extends Activity implements ConnectionCallbacks, OnConnectionFailedListener{ private static final int REQUEST_CODE_RESOLVE_ERR = 9000; private static final String TAG = "GPlusLogin"; private ProgressDialog mConnectionProgressDialog; private PlusClient mPlusClient; private ConnectionResult mConnectionResult; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.gplus_layout); mPlusClient = new PlusClient.Builder(this, this, this).setVisibleActivities("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity").build(); Bundle extras = getIntent().getExtras(); mConnectionProgressDialog = new ProgressDialog(this); mConnectionProgressDialog.setMessage("Signing in..."); if(extras!=null){ if(extras.getString("signout")!=null){ if (mPlusClient.isConnected()) { mPlusClient.clearDefaultAccount(); mPlusClient.disconnect(); mPlusClient.connect(); finish(); startActivity(getIntent()); } } }else{ findViewById(R.id.sign_in_button).setOnClickListener(new OnClickListener() { public void onClick(View view) { // TODO Auto-generated method stub if (view.getId() == R.id.sign_in_button && !mPlusClient.isConnected()) { if (mConnectionResult == null) { mConnectionProgressDialog.show(); } else { try { mConnectionResult.startResolutionForResult(GPlusLogin.this, REQUEST_CODE_RESOLVE_ERR); } catch (SendIntentException e) { // Try connecting again. mConnectionResult = null; mPlusClient.connect(); } } } } }); } } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); mPlusClient.connect(); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); mPlusClient.disconnect(); } @Override public void onConnectionFailed(ConnectionResult result) { // TODO Auto-generated method stub if (mConnectionProgressDialog.isShowing()) { // The user clicked the sign-in button already. Start to resolve // connection errors. Wait until onConnected() to dismiss the // connection dialog. if (result.hasResolution()) { try { result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR); } catch (SendIntentException e) { mPlusClient.connect(); } } } mConnectionResult = result; } @Override protected void onActivityResult(int requestCode, int responseCode, Intent intent) { if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) { mConnectionResult = null; mPlusClient.connect(); } } @Override public void onConnected() { // TODO Auto-generated method stub mConnectionProgressDialog.dismiss(); Intent main = new Intent(GPlusLogin.this, MainActivity.class); main.putExtra("result", true); startActivity(main); } @Override public void onDisconnected() { // TODO Auto-generated method stub Log.d(TAG, "disconnected"); } } ``` My Disconnect code on `MainActivity`: ``` import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Bundle extras = getIntent().getExtras(); if(extras==null){ Intent intent = new Intent(this, GPlusLogin.class); startActivity(intent); } TextView text1 = (TextView) findViewById(R.id.text1); text1.setText("You Are Connected :D"); Button SignOut = (Button) findViewById(R.id.sign_out_gplus); SignOut.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity.this, GPlusLogin.class); intent.putExtra("signout", true); startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } ```

Original source

Related problems