覆盖后退按钮以充当主页按钮

2022-08-31 05:33:03

按下后退按钮时,我希望我的应用程序进入停止状态,而不是已销毁状态。

在Android文档中,它指出:

...并非所有活动都有在按下 BACK 时被销毁的行为。当用户开始在 Music 应用程序中播放音乐,然后按 BACK 时,应用程序将覆盖正常的后退行为,防止播放器活动被破坏,并继续播放音乐,即使其活动不再可见

如何在自己的应用程序中复制此功能?

我认为一定有三种可能性...

  1. 捕获后退按钮按下(如下所示),然后调用主屏幕按钮调用的任何方法。

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            Log.d(this.getClass().getName(), "back button pressed");
        }
        return super.onKeyDown(keyCode, event);
    }
    
  2. 捕获后退按钮按下,然后欺骗主屏幕按钮按下。

  3. 捕获后退按钮按下,然后启动主屏幕的“活动”,有效地将应用程序的“活动”置于停止状态。

编辑:我知道服务,并在与此问题相关的应用程序中使用一个服务。此问题专门涉及在按下后退按钮时将活动置于停止状态,而不是已销毁状态。


答案 1

大多数情况下,您需要创建一个服务以在后台执行某些操作,而您的可见光只是控制它。(我确信音乐播放器的工作方式相同,因此文档中的示例似乎有点误导。如果是这种情况,那么您的罐头像往常一样,仍然会运行。ActivityServiceActivityfinishService

一种更简单的方法是捕获按钮按下并调用 moveTaskToBack(true),如下所示:Back

// 2.0 and above
@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

我认为首选选项应该是让活动正常完成并能够重新创建自身,例如,如果需要,从服务中读取当前状态。但有时可以用作快速替代方案。moveTaskToBack

注意:正如Dave在下面指出的Android 2.0引入了一种新方法,以及这些关于如何处理“后退”按钮的建议onBackPressed


答案 2

使用以下代码:

public void onBackPressed() {    
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    startActivity(intent);
}

推荐