【问题标题】:Keycode_home doesn't get called ANDROIDKeycode_home 不会被称为 ANDROID
【发布时间】:2015-08-07 15:54:56
【问题描述】:

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

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

【问题讨论】:

  • “当用户按下主页键时,应用程序应该关闭”——不,不应该。 “我可以让应用程序更高效”——因为除了按 HOME 之外,用户还有很多方法可以离开您的应用程序,请“让应用程序更高效”。

标签: android


【解决方案1】:

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

【讨论】:

  • 感谢您的回答。你说,我只能在按下 Home 键时进行推断。这是否意味着有办法解决我的问题?
  • 嗯,是的,也许。是的,如果您的活动不使用键盘,则没有 EditText 或用户按下硬键盘。可能是您可能能够在使用键盘时过滤掉键,并且在按下 Home 键时能够推断出逻辑。
【解决方案2】:

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

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

//Do whatever
}

【讨论】:

  • 非常感谢。不知何故,现在这两种方法都可以正常工作,只是应用程序不会被关闭,但这没关系,因为现在它在按下主页按钮后使用不到 1 mb 或 RAM。
  • 您可能可以在 onStop 方法中添加代码来杀死应用程序,我已经看过一些关于它的帖子...stackoverflow.com/questions/2092951/…
【解决方案3】:

我在这里找到了它:

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多