在android中关闭应用程序硬件后退按钮

时间:2017-10-17 23:39:38

标签: java android android-intent

我看过很多像这样的帖子,但没有一个解决方案对我有用。我有一个应用程序,其中首先加载的是LoginActivity,它检查您是否已经登录,如果您将它发送到MainActivity,这是应用程序的主要部分。我的问题是,当你使用MainActivity并点击硬件后退按钮时,它只是重新加载MainActivity,因为我假设它试图“返回”LoginActivity。

我在这里看过的帖子中尝试过各种“修复”,但似乎都没有。目前在我的MainActivity的AndroidManifest.xml文件中,我添加了

  

机器人:noHistory = “真”

对于MainActivity意图,但这并没有太大的区别。我看过另一个帖子,有人提到基本上用一个特殊的Intent开始一个新的Activity,让系统加载你的主屏幕,但有人指出,如果有人加载你的应用程序,点击回来,然后再次执行它继续添加到“堆栈“,这可能非常糟糕。

所以我希望有人遇到过类似的东西,你必须首先加载LoginActivity以验证用户,然后启动Main,但是你需要在MainActivity上按下后退按钮。

提前感谢您的帮助。我很感激。

4 个答案:

答案 0 :(得分:3)

onActivityResult创建一个LoginActivity函数,然后使用MainActivity

调用startActivityForResult()

示例:

<强> LoginActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startActivityForResult(new Intent(this, MainActivity.class), 1);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (data.getBooleanExtra("EXIT", false)) {
            finish();
        }
    }
}

要从MainActivity关闭整个应用,请使用onBackPressed。别忘了删除super.onBackPressed()

<强> MainActivity:

@Override
public void onBackPressed() {
    // super.onBackPressed();
    Intent intent = new Intent();
    intent.putExtra("EXIT", true);
    setResult(RESULT_OK, intent);
    finish();
}

答案 1 :(得分:1)

我有一个应用程序,第一个屏幕是一个启动活动(显示我的徽标),几秒钟后它转到MainActivity。在您的LoginActivity中,在启动MainActivity后关闭LoginActivity。 做这样的事情:

     Intent mainIntent = new Intent(LoginActivity.this,MainActivity.class);
     LoginActivity.this.startActivity(mainIntent);
     LoginActivity.this.finish();

答案 2 :(得分:0)

当我遇到这类问题时,我会添加&#34; AndroidManifest.xml&#34;对于每个活动:

android:launchMode="singleTask"

在您的loginActivity中:

startActivity(new Intent(this, MainActivity.class));
finish();

请检查:https://developer.android.com/guide/topics/manifest/activity-element.html

  

相比之下,&#34; singleTask&#34;和&#34; singleInstance&#34;活动只能开始一项任务。它们始终位于活动堆栈的根部。此外,设备一次只能保存一个活动实例 - 只有一个这样的任务。

答案 3 :(得分:0)

您可以尝试我的代码:

void gotoLogin() {
    Intent t = new Intent(SplashScreenActivity.this, LoginActivity.class);
    finish();
    startActivity(t);
}

void gotoMainActivity() {
    Intent t = new Intent(SplashScreenActivity.this, MainActivity.class);
    finish();
    startActivity(t);
}
检查后

if ( you logged in){
   gotoMainActivity();
} else {
   gotoLogin();
}

我希望它可以帮助你解决问题! 谢谢!