2013-04-29 127 views
0

嘿,我有一个看起来像这样的代码:Keycode_home不会被调用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);} 

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

+0

“应用程序应该关闭,当用户按Home键” - 不,它不应该。 “我可以让应用程序的性能更高效” - 因为除了按HOME之外,用户还有很多方式可以离开您的应用程序,请“让应用程序更高性能”。 – CommonsWare 2013-04-29 22:30:13

回答

2

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

+1

感谢您的回答。你说,我只能推断何时按Home键。这是不是意味着有办法解决我的问题? – user2330482 2013-04-29 21:57:58

+0

好吧,也许。是的,如果你的活动不使用键盘,那么没有EditText或用户按下硬键盘。也许你可能能够在使用键盘时过滤出键,并且逻辑能够推断何时按下Home键。 – 2013-04-29 22:04:19

2

你可以尝试在你的main中使用onClose。这将允许您保存文件或在关闭应用程序时执行任何操作。 喜欢的东西...

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

//Do whatever 
} 
+0

非常感谢。不知何故,现在这两件事情都起作用,只是应用程序不会被关闭,但那是可以的,因为现在它在按下主页按钮后使用低于1 MB或RAM。 – user2330482 2013-04-29 22:08:24

+0

你可以添加代码到onStop方法来杀死应用程序,我已经看到了一些关于它的帖子... http://stackoverflow.com/questions/2092951/how-to-close-android-application。 – octupus23 2013-04-29 22:11:23

0

我发现它在这里SO:

最后,在您的活动代码应该be:

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

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

但是您可以使用Reflectionachieve。请参阅this post