如何控制硬件后退按钮

时间:2011-06-27 05:50:22

标签: android

在我的应用程序中,我想控制硬件back button。这意味着在我的应用程序中有四到五个活动。现在假设我从一个活动转移到另一个活动。

现在,在我的情况下,当我按下硬件后退按钮时,我希望我的应用程序退出任何活动,但是在我的应用程序中按下此后退按钮时,它不会退出我的应用程序,直到它到达第一个活动...所以我的问题是我应该怎么做,当我按下硬件后退按钮它将退出我的应用程序...请建议我。

2 个答案:

答案 0 :(得分:17)

试试这个:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if(keyCode == KeyEvent.KEYCODE_BACK)
    {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        return true;
    }
return false;
}

答案 1 :(得分:4)

您必须将所有5个活动的实例存储在公共类中,并在每个活动中添加onBackPressed(),这将调用公共类中的方法,该方法将在每个活动上调用activity.finish()五项活动。

例如:

class Activity1 extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MyController.getInstance().setActivity1(this);
    }

    public void onBackPressed() {
        MyController.getInstance().closeAllActivities();
        super.onBackPressed();
    }
}

同样,为Activity2,Activity3等编写。而且,MyController类看起来像这样:

class MyController {
    private static MyController instance;
    private Activity activity1, activity2, activity3, activity4, activity5;

    private MyController() {}
    public static synchronized MyController getInstance() {
        if(instance == null) {
            instance = new MyController;
        }

        return instance;
    }

    public void setActivity1(Activity activityObject) { activity1 = activityObject; }
    public void setActivity2(Activity activityObject) { activity2 = activityObject; }
    public void setActivity3(Activity activityObject) { activity3 = activityObject; }
    public void setActivity4(Activity activityObject) { activity4 = activityObject; }
    public void setActivity5(Activity activityObject) { activity5 = activityObject; }

    public void closeAllActivities() {
        if(activity1 != null) {
            activity1.finish();
        }
        if(activity2 != null) {
            activity2.finish();
        }
        if(activity3 != null) {
            activity3.finish();
        }
        if(activity4 != null) {
            activity4.finish();
        }
        if(activity5 != null) {
            activity5.finish();
        }
    }
}