2015-11-09 56 views
3

我试图将谷歌登录与我的应用程序,它是按需工作。但是当我关闭应用程序时,它要求再次登录,我不想要。我正在尝试silentSignIn,但这没有帮助。我希望用户在登录后查看MainActivity。谷歌登录每次关闭应用程序后出现android

import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 

import com.facebook.CallbackManager; 
import com.facebook.FacebookSdk; 
import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.Scopes; 
import com.google.android.gms.common.SignInButton; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.OptionalPendingResult; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.common.api.Scope; 
import com.google.android.gms.common.api.Status; 
import com.google.android.gms.plus.Plus; 
import com.google.android.gms.plus.model.people.Person; 

public class LoginActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener { 

    private static final String TAG = "LoginActivity"; 
    private GoogleApiClient mGoogleApiClient; 
    private static final int RC_SIGN_IN = 9001; 
    private ProgressDialog mProgressDialog; 

    private String mFullName ; 
    private String mEmail ; 
    private String mAccountId ; 
    private int mGender ; 
    private String mRights; 
    private String mBirthDay ; 

    //CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     findViewById(R.id.sign_in_button).setOnClickListener(this); 

     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .build(); 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .addApi(Plus.API) 
       .addScope(new Scope(Scopes.PROFILE)) 
       .addScope(new Scope(Scopes.EMAIL)) 
       .build(); 

     SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); 
     signInButton.setSize(SignInButton.SIZE_STANDARD); 
     signInButton.setScopes(gso.getScopeArray()); 

     /*FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create();*/ 


    } 

    /** 
    * Called when a view has been clicked. 
    * 
    * @param v The view that was clicked. 
    */ 
    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.sign_in_button: 
       signIn(); 
       break; 
      /*case R.id.sign_out_button: 
       signOut(); 
       break; 
      case R.id.disconnect_button: 
       revokeAccess(); 
*/    // break; 
     } 
    } 



    @Override 
    public void onStart() { 
     super.onStart(); 
     OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); 
     if (opr.isDone()) { 
      Log.d(TAG, "Got cached sign-in"); 
      GoogleSignInResult result = opr.get(); 
      handleSignInResult(result); 
     } else { 
      showProgressDialog(); 
      opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
       @Override 
       public void onResult(@NonNull GoogleSignInResult googleSignInResult) { 
        hideProgressDialog(); 
        handleSignInResult(googleSignInResult); 
       } 
      }); 
     } 


    } 



    private void signIn() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 

    /*public void getUserDetails(){ 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     GoogleSignInAccount acct = result.getSignInAccount(); 
     String personName = acct.getDisplayName(); 
     String personEmail = acct.getEmail(); 
     String personId = acct.getId(); 
     Uri personPhoto = acct.getPhotoUrl(); 

    }*/ 

    private void handleSignInResult(GoogleSignInResult result) { 
     Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
     Log.d(TAG,"handleSignInResult Result : " + result); 
     if (result.isSuccess()) { 
// Signed in successfully, show authenticated UI. 
      GoogleSignInAccount acct = result.getSignInAccount(); 
      // mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName())); 
      //updateUI(true); 
      showSignedInUI(); 
     } else { 
// Signed out, show unauthenticated UI. 
      //updateUI(false); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      handleSignInResult(result); 
      if(result.isSuccess()){ 
       GoogleSignInAccount acct = result.getSignInAccount(); 
       // Get account information 
       mFullName = acct.getDisplayName(); 
       mEmail = acct.getEmail(); 
       mAccountId = acct.getId(); 
       Uri personPhoto = acct.getPhotoUrl(); 
       if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { 
        Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); 
        mGender = currentPerson.getGender(); 
        mBirthDay = currentPerson.getBirthday(); 
        mRights = currentPerson.getBraggingRights(); 
       } 

       Log.d(TAG,"User Details : Name : " + mFullName + " Email : " + mEmail + " Account Id : " + mAccountId); 
       Log.d(TAG,"Photo URL : " + personPhoto); 
       Log.d(TAG, " Gender : " + mGender + " BirthDay : " + mBirthDay + " Rights : " + mRights); 

       } 
     } 
    } 

    private void signOut() { 
     Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
       new ResultCallback<Status>() { 
        @Override 
        public void onResult(Status status) { 
// [START_EXCLUDE] 
         // updateUI(false); 
// [END_EXCLUDE] 
        } 
       }); 
    } 

    private void revokeAccess() { 
     Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
       new ResultCallback<Status>() { 
        @Override 
        public void onResult(Status status) { 
// [START_EXCLUDE] 
         //updateUI(false); 
         // showSignedInUI(); 
// [END_EXCLUDE] 
        } 
       }); 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
// An unresolvable error has occurred and Google APIs (including Sign-In) will not 
// be available. 
     Log.d(TAG, "onConnectionFailed:" + connectionResult); 
    } 
    private void showProgressDialog() { 
     if (mProgressDialog == null) { 
      mProgressDialog = new ProgressDialog(this); 
      //mProgressDialog.setMessage(getString(R.string.loading)); 
      mProgressDialog.setMessage(getString(R.string.loading)); 
      mProgressDialog.setIndeterminate(true); 
     } 
     mProgressDialog.show(); 
    } 
    private void hideProgressDialog() { 
     if (mProgressDialog != null && mProgressDialog.isShowing()) { 
      mProgressDialog.hide(); 
     } 
    } 

    private void showSignedInUI() { 
     Log.d(TAG, "showSignedInUI: " + mGoogleApiClient.isConnected()); 
     if (mGoogleApiClient.isConnected()) { 
      //getProfileInformation(); 
      final Context context = this; 
      Intent intent = new Intent(context, MapsActivity.class); 

      startActivity(intent); 
      finish(); 


     } 
    } 


} 

回答

0

,如果你想看到的MainActivity一旦用户登录,然后在onStart()删除代码。

1

当前使用isConnected()检查状态并继续进行地图活动或您只需将共享首选项或数据库中的一个状态保存在登录屏幕中,然后将其带入应用程序中,一旦登录屏幕已打开

相关问题