如何在按下硬件主页按钮的同时关闭所有活动?

时间:2013-05-23 08:58:41

标签: android android-activity

我有一个申请,我有5个活动。一个菜单活动和另外4个子活动附加到菜单屏幕。所以我可以选择任何活动然后再回到菜单。假设我像这样移动

菜单 - >活动1 - >菜单 - >活动3 - >活动2 - >菜单

现在我按下Home / Back按钮,我希望我的应用程序会显示一个退出确认的警告对话框,如果我按是然后杀死所有活动并显示主屏幕。

我已经尝试过那些finish(),System.exit(0),但没有运气。 finish()和System.exit(0)都完成当前活动而不是所有活动。 请给我指路。

4 个答案:

答案 0 :(得分:0)

我认为在后台停止儿童活动会更好。例如

Menu > Activity1 > 

现在,如果您再次转到menu,请完成Acitivy 1

再次Menu > Activity 3 > Activity 2 > Menu

当您转到活动3然后转到活动2 ..然后通过使用结果的开始活动从3开始活动2。因此,如果你想从活动2进入菜单,那么你可以通过活动3 ..

使用CLEAR_TOPSINGLE_TASKS标志打开菜单的另一个更好的解决方案。因此,当您进入菜单时,只有菜单活动处于活动状态。然后通过调用完成,您可以完成您的申请。

答案 1 :(得分:0)

这对我有用:

    Intent intent = new Intent(this, TopMenuActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra(Utils.INTENT_EXIT, true);
    startActivity(intent);
    finish(); // finish the current activity

然后在TopMenuActivity onCreate()方法中添加以下内容

    if( getIntent().getBooleanExtra(Utils.INTENT_EXIT, false)){
        finish(); // finish TopMenu and go HOME
        return; // prevent from doing unnecessary stuff below
    }

很脏,是的!但它确实有效。

答案 2 :(得分:0)

是的,你可以。有2个不同的aproches

  1. 使用onActivityResult

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Check which request we're responding to
        if (resultCode == QUIT_ALL) {
            // 
            setResult(QUIT_ALL,returnIntent);     
           finish();
         }
     }    
    //last activity
    setResult(QUIT_ALL,returnIntent);     
    finish();
    
  2. 明确声明活动跳过堆栈:

    < activity android:name=".Activity1" android:noHistory="true" ... />
    < activity android:name=".Activity2" android:noHistory="true" ... />
    

答案 3 :(得分:0)

完成活动,当主页按钮单击时。在您的活动中输入此代码。它的工作对我来说很完美..

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_HOME)) {
    Log.v("hari", "KEYCODE_HOME");
    onUserLeaveHint();

    return true;
}
if ((keyCode == KeyEvent.KEYCODE_BACK)) {

    return true;
}
if ((keyCode == KeyEvent.KEYCODE_MENU)) {

    return true;
}
return false;
}


public void onUserLeaveHint() { // this only executes when Home is selected.

super.onUserLeaveHint();
if (!isFinishing()) {
    Log.v("hari", "if condition working");
    finish();
}

}

但使用此代码时有时后退按钮无效...