2013-04-29 149 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