2016-11-02 3 views
-1

Ich habe eine Aktivität namens Login. Es verfügt über die Google API-Anmeldeschaltflächen und Funktionen. Wenn es erfolgreich protokolliert wurde, wird eine andere Aktivität namens LoggedIn gestartet.Aufruf von Google API Abmeldung von einer anderen Aktivität

Wenn eine Taste (ID: Logout) gedrückt wird, muss sie zurück zum Login gehen, den Benutzer abmelden und die Login-Taste erneut anzeigen. Wie kann ich das machen ?

LoggedIn Funktion

package com.digidtheapp.digid; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.util.Log; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.view.*; 

import com.bumptech.glide.Glide; 
import com.bumptech.glide.load.engine.cache.*; 
import com.google.android.gms.appdatasearch.GetRecentContextCall; 
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.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.Status; 

public class LoggedIn extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 
    public String name,pic,Email; 
    public static String sn,sp,se; 
    private GoogleApiClient mGoogleApiClient; 
    private static final String TAG = LoggedIn.class.getSimpleName(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_logged_in); 
     Intent intent = getIntent(); 
     name =intent.getStringExtra("Name"); 
     Email = intent.getStringExtra("Email"); 
     pic = intent.getStringExtra("Profile"); 
     View header = ((NavigationView)findViewById(R.id.nav_view)).getHeaderView(0); 
     ((TextView) header.findViewById(R.id.user)).setText(name); 

     View header2 = ((NavigationView)findViewById(R.id.nav_view)).getHeaderView(0); 
     ((TextView) header2.findViewById(R.id.emailField)).setText(Email); 

     View imageChanger = ((NavigationView)findViewById(R.id.nav_view)).getHeaderView(0); 

     Glide.with(getApplicationContext()).load(pic) 
       .thumbnail(0.5f) 
       .crossFade() 
       .diskCacheStrategy(com.bumptech.glide.load.engine.DiskCacheStrategy.ALL) 
       .into((ImageView) imageChanger.findViewById(R.id.profilePic)); 











     Log.e(TAG,"name = "+name+"\n Email = "+Email+"\n Profile = "+pic); 


     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, hello(), Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 


      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 

     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.logged_in, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_History) { 
      // Handle the camera action 
     } 

      else if (id == R.id.nav_Request) { 
      finish(); 
      Intent intent = new Intent(this ,Request.class); 
      startActivity(intent); 

     } 
     else if(id == R.id.aboutUs) 
     { 
      finish(); 
      Intent intent = new Intent(this ,About.class); 
      startActivity(intent); 
     } 
     else if(id == R.id.Logout) 
     { 
      signOut(); 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 

    } 
    public String hello() 
    { 
     Intent intent = new Intent(this ,Request.class); 
     startActivity(intent); 
     return "act"; 
    } 
    private void signOut() { 
     new Login().signOutFromGplus(); 


    } 

    } 

Login-Funktion

package com.digidtheapp.digid; 



     import android.app.ProgressDialog; 
     import android.content.Intent; 
     import android.os.Bundle; 
     import android.support.annotation.NonNull; 
     import android.support.v7.app.AppCompatActivity; 
     import android.util.Log; 
     import android.view.View; 
     import android.widget.Button; 
     import android.widget.ImageView; 
     import android.widget.LinearLayout; 
     import android.widget.TextView; 


     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.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.Status; 
     import android.util.*; 
     import android.view.Window; 


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

    private static final String TAG = Login.class.getSimpleName(); 
    private static final int RC_SIGN_IN = 007; 

    private GoogleApiClient mGoogleApiClient; 
    private ProgressDialog mProgressDialog; 

    private SignInButton btnSignIn; 
    private Button btnSignOut, btnRevokeAccess; 
    private LinearLayout llProfileLayout; 
    private ImageView imgProfilePic; 
    private TextView txtName, txtEmail; 
    public String name,email,pic; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     Login var = new Login(); 
     btnSignIn = (SignInButton) findViewById(R.id.sign_in_button); 

     btnSignIn.setOnClickListener(this); 

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

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this, this) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 

     // Customizing G+ button 
     btnSignIn.setSize(SignInButton.SIZE_STANDARD); 
     btnSignIn.setScopes(gso.getScopeArray()); 
    } 


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


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

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

    private void handleSignInResult(GoogleSignInResult result) { 
     Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
     if (result.isSuccess()) { 
      // Signed in successfully, show authenticated UI. 
      GoogleSignInAccount acct = result.getSignInAccount(); 

      Log.e(TAG, "display name: " + acct.getDisplayName()); 

      name = acct.getDisplayName(); 
      pic = acct.getPhotoUrl().toString(); 
      email = acct.getEmail(); 



      updateUI(true); 
     } else { 
      // Signed out, show unauthenticated UI. 
      updateUI(false); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     int id = v.getId(); 

     switch (id) { 
      case R.id.sign_in_button: 
       signIn(); 
       break; 


     } 
    } 

    @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); 
     } 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); 
     if (opr.isDone()) { 
      // If the user's cached credentials are valid, the OptionalPendingResult will be "done" 
      // and the GoogleSignInResult will be available instantly. 
      Log.d(TAG, "Got cached sign-in"); 
      GoogleSignInResult result = opr.get(); 
      handleSignInResult(result); 
     } else { 
      // If the user has not previously signed in on this device or the sign-in has expired, 
      // this asynchronous branch will attempt to sign in the user silently. Cross-device 
      // single sign-on will occur in this branch. 
      showProgressDialog(); 
      opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
       @Override 
       public void onResult(GoogleSignInResult googleSignInResult) { 
        hideProgressDialog(); 
        handleSignInResult(googleSignInResult); 
       } 
      }); 
     } 
    } 

    @Override 
    public void onConnectionFailed(@NonNull 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.setIndeterminate(true); 
     } 

     mProgressDialog.show(); 
    } 

    private void hideProgressDialog() { 
     if (mProgressDialog != null && mProgressDialog.isShowing()) { 
      mProgressDialog.hide(); 
     } 
    } 

    private void updateUI(boolean isSignedIn) { 
     if (isSignedIn) { 

      Intent intent = new Intent(this ,LoggedIn.class); 
      Log.e(TAG,name +"\t"+email+"\t"+pic); 
      intent.putExtra("Name",name); 
      intent.putExtra("Email",email); 
      intent.putExtra("Profile",pic); 
      startActivity(intent); 


     } else { 



     } 
    } 
    public void signOutFromGplus() { 

    signOut(); 

    } 
} 
+0

Gibt es eine Frage? – mjs

+0

Abmelden des Benutzers von der App durch Drücken der Schaltfläche Abmelden bei Aktivität LoggeedIn –

Antwort

1

Wenn Sie versuchen, die signOutFromGplus() -Methode von LoggedIn zu verwenden, können Sie einfach es statisch machen, dann rufen es mit dem folgenden:

public static void signOutFromGplus(){...} 

Login.signOutFromGplus();

Verwandte Themen