Keycode_home不会被称为ANDROID

时间:2013-04-29 21:50:32

标签: android

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

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);}

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

4 个答案:

答案 0 :(得分:2)

通过设计,无法拦截Home键,因此KEYCODE_HOME将不会在任何回调中发送。您只能推断何时按下Home键。

答案 1 :(得分:2)

你可以尝试在你的主要使用onClose。这将允许您在关闭应用程序时保存文件或执行任何操作。 有点像...

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

//Do whatever
}

答案 2 :(得分:0)

我在SO中找到了它:

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

@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;
}

答案 3 :(得分:0)

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

但您可以使用achieve Reflection。见this post