我有两项活动。
我也有这个设置的启动画面:
<activity android:name=".SplashScreen"
android:theme="@style/AppTheme.NoActionBar"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
然后,启动画面使用以下代码将用户转移到HomeScreen:
Intent intent = new Intent(SplashScreen.this, HomeScreen.class);
在HomeScreen活动中,我检查用户是否已登录。如果他没有登录,我会将他转到LoginActivity:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser() == null)
{
Intent intent = new Intent(HomeScreen.this,LoginActivity.class);
Toast.makeText(HomeScreen.this,"H>L on no login",Toast.LENGTH_LONG).show(); //toast to show me why my app is in infinite loop
startActivity(intent);
}
}
};
在LoginActivity上,我有一个使用FireBase Google身份验证的简单登录按钮。另外,我检查用户是否已经登录,如果是,他将被转移到HomeScreen Activity:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser() != null)
{
Intent intent = new Intent(LoginActivity.this,HomeScreen.class);
Toast.makeText(LoginActivity.this,"L>H already signed in",Toast.LENGTH_LONG).show();
startActivity(intent);
}
}
};
而且,还有:
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "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) {
if (task.isSuccessful()) {
Intent intent = new Intent(LoginActivity.this,HomeScreen.class);
Toast.makeText(LoginActivity.this,"L>H on login",Toast.LENGTH_LONG).show();
startActivity(intent);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
}
现在,问题是:当我打开应用程序时,我会看到启动画面,然后转移到“登录”页面。然后当我按回来时,我得到登录页面而不是退出应用程序。此外,一旦我进入:我得到了闪屏,我被带到了HomeScreen。然后,如果我按回来,我将被带到HomeScreen AGAIN,而不是退出应用程序。
请帮帮我。我搜索了StackOverflow,但并没有到达任何地方。任何帮助表示赞赏。如果您需要更多信息,请向我询问更新! :)
答案 0 :(得分:0)
我不确定它是否正确,请尝试,
不要从startActivity(new Intent(HomeScreen.this,LoginActivity.class))
调用onAuthStateChanged()
,只需调用finish()即可。希望它可以帮助你。
答案 1 :(得分:0)
简单地这样做。
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
答案 2 :(得分:0)
您需要实现onBackPressed(),默认情况下您的应用应退出。但是,要退出您的应用,您可以使用
getActivity.finish();
或
finishAndRemoveTask(); - 它完成所有活动并将其从最近的任务列表中删除
答案 3 :(得分:0)
好的,我找到了解决方案。除了下面的宝贵回复之外,还有必要在意图中添加一个标记FLAG_ACTIVITY_CLEAR_TOP。
这是工作代码:
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Intent intent = new Intent(LoginActivity.this,HomeScreen.class);
Toast.makeText(LoginActivity.this,"L>H on login",Toast.LENGTH_LONG).show();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}