Java 我如何可以忽略应用程序中的活动?
我从**firebase设计了一个登录界面,我希望用户只登录一次,然后忽略登录界面** 公共类MainActivity扩展AppCompativeActivity实现GoogleAppClient.OnConnectionFailedListener、View.OnClickListener{Java 我如何可以忽略应用程序中的活动?,java,android,Java,Android,我从**firebase设计了一个登录界面,我希望用户只登录一次,然后忽略登录界面** 公共类MainActivity扩展AppCompativeActivity实现GoogleAppClient.OnConnectionFailedListener、View.OnClickListener{ SignInButton signInButton; private FirebaseAuth mAuth; GoogleApiClient mGoogleApiClient; private stati
SignInButton signInButton;
private FirebaseAuth mAuth;
GoogleApiClient mGoogleApiClient;
private static final int RC_SING_IN = 9001;
private static final String TAG = "SingInActivity";
private TextView textView;
private ImageView imgAvatar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
// Configure Google Sign In
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();
signInButton = (SignInButton) findViewById(R.id.busingin);
signInButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.busingin:
singIn();
break;
}
}
private void singIn() {
Intent singInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(singInIntent, RC_SING_IN);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SING_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult : " + result.isSuccess());
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
startActivity(new Intent(MainActivity.this, Main2Activity.class));
firebaseAuthWithGoogle(acct);
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.d(TAG, "onConnecationFailed :" + connectionResult);
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d("TECSTORE", "firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d("TECSTORE", "signInWithCredential:onComplete:" + task.isSuccessful());
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Log.w("TECSTORE", "signInWithCredential", task.getException());
}
}
});
}
SignInButton SignInButton;
私人消防队;
GoogleapClient MGoogleapClient;
专用静态最终输入RC\u SING\u IN=9001;
私有静态最终字符串TAG=“SingInActivity”;
私有文本视图文本视图;
私有ImageView imgAvatar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth=FirebaseAuth.getInstance();
//配置谷歌登录
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestEmail()
.build();
mgoogleapclient=新的Googleapclient.Builder(此)
.enableAutoManage(这个,这个)
.addApi(Auth.GOOGLE\u SIGN\u IN\u API,gso)
.build();
signInButton=(signInButton)findViewById(R.id.businging);
signInButton.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.Businging:
singIn();
打破
}
}
私人签名{
Intent singInIntent=Auth.GoogleSignInApi.getsigninent(mgoogleapclient);
startActivityForResult(singInIntent,RC_SING__IN);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==RC\u SING\u IN){
GoogleSignInResult结果=Auth.GoogleSignInApi.getSignInResultFromIntent(数据);
handleSignInResult(结果);
}
}
私有无效handleSignInResult(Google SignInResult结果){
Log.d(标记为“handleSignInResult:+result.issucess());
if(result.issucess()){
GoogleSignInAccount acct=result.getSignInAccount();
startActivity(新意图(MainActivity.this、Main2Activity.class));
firebaseAuthWithGoogle(acct);
}
}
@凌驾
public void onconnection失败(@NonNull ConnectionResult ConnectionResult){
Log.d(标记“OnConnectionFailed:+connectionResult”);
}
私有void firebaseAuthWithGoogle(谷歌签名帐户){
Log.d(“TECSTORE”、“firebaseAuthWithGoogle:+acct.getId());
AuthCredential credential=GoogleAuthProvider.getCredential(acct.getIdToken(),null);
mAuth.SIGNWITH凭证(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(“TECSTORE”,“signInWithCredential:onComplete:”+task.isSuccessful());
//如果登录失败,则向用户显示消息。如果登录成功
//将通知身份验证状态侦听器,并使用逻辑来处理
//可以在侦听器中处理已登录用户。
如果(!task.issusccessful()){
w(“TECSTORE”,“signInWithCredential”,task.getException());
}
}
});
}
}
我从firebase设计了一个登录界面,我希望用户只登录一次,然后忽略登录界面。您可以使用
SharedReference
。
首先,当用户第一次输入凭据时,您将进入SharedReference
//Create login session
private static final String IS_USER_LOGIN = "IsUserLoggedIn";
public void createUserLoginSession(String name, String email){
// Storing login value as TRUE
editor.putBoolean(IS_USER_LOGIN, true);
// Storing name in pref
editor.putString(KEY_NAME, name);
// Storing email in pref
editor.putString(KEY_EMAIL, email);
// commit changes
editor.commit();
}
下次检查用户是否存在
// Check for login
public boolean isUserLoggedIn(){
return pref.getBoolean(IS_USER_LOGIN, false);
}
public boolean checkLogin(){
// Check login status
if(!this.isUserLoggedIn()){
// user is not logged in redirect him to Login Activity
Intent i = new Intent(YourCurrentActivity.this, LoginActivity.class);
// Closing all the Activities from stack
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
startActivity(i);
return true;
}
return false;
}
如果你懂阿拉伯语,请回答我,因为我英语不好,我不懂阿拉伯语。只要理解代码,你就会知道使用Gmail帐户登录的整个概念,而不是电子邮件。这并不是上述老问题的完全重复。这个问题特别与Firebase登录有关。虽然老的“复制”问题的解决方案是基于SharedReference的,但这不够安全,无法处理登录的详细信息。当然,这取决于开发者的决定。