0

嘿,我有一个看起来像这样的代码:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_HOME:
            System.out.println("sdfadsfadsf");
            finish();
            return true; }
  } return super.onKeyDown(keyCode, event);}

我的问题是,应用程序都不会终止,println 也不会被执行。有人可以告诉我我在这里做错了什么吗?当用户按下主页键时,应用程序应该关闭。我这样做是因为我的用户在打开其他应用程序时遇到的性能问题。我可以让应用程序更高效,但在这种类型的应用程序中,真的没有必要让它保持运行。

4

4 回答 4

2

按照设计,Home 键不能被拦截,因此KEYCODE_HOME不会在任何回调中发送。您只能在按下 Home 键时进行推断。

于 2013-04-29T21:54:19.597 回答
2

您可能可以尝试在主目录中使用 onClose。这将允许您在关闭应用程序时保存文件或执行任何操作。就像是...

@Override
protected void onStop() {
    super.onStop();

//Do whatever
}
于 2013-04-29T21:57:39.620 回答
0

我在这里找到了它:

最后,您的活动中的代码应该是:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    boolean defaultAction = super.onKeyDown(keyCode, event);

    if (keyCode == KeyEvent.KEYCODE_HOME) {
        Log.i(TAG, "it's into the IF statement!");
    }

    return defaultAction;
}
于 2013-04-29T22:25:32.143 回答
0

此密钥由框架处理,永远不会传递给应用程序。

但你可以achieve使用它Reflection。看到这个帖子

于 2015-08-07T07:54:56.663 回答