許多開發者嘗試在 onKeyDown() 中攔截 KeyEvent.KEYCODE_HOME 以實現「按 Home 鍵結束 Activity」的邏輯,但發現程式碼完全不生效:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_HOME:
System.out.println("Home clicked....");
return true;
}
}
return super.onKeyDown(keyCode, event);
}
Android 系統為了確保使用者隨時能回到桌面、切換任務,將 Home 鍵事件完全保留在系統層處理,不會分發給應用程式的 onKeyDown()、onKeyUp() 或 dispatchKeyEvent()。因此,任何在 Activity 中嘗試攔截 Home 鍵的程式碼都註定失敗。
即使回傳 true,系統也不會將 Home 鍵事件傳遞給 App,所以根本進不入判斷邏輯。
當使用者按 Home 鍵離開時,Activity 會依序觸發 onPause() → onStop()。若需在離開時釋放資源、儲存狀態或結束 Activity,請在此處處理:
@Override
protected void onPause() {
super.onPause();
// 釋放相機、停止音樂、儲存草稿等
// 若確需結束 Activity(極少見):
// finish();
}
這屬於系統全域手勢,一般應用無法干預。若為系統級應用(簽名權限),可透過 GlobalActions 或無障礙服務實作,但不建議普通開發者嘗試。
Android 設計哲學明確禁止應用攔截 Home 鍵。請接受此限制,改用生命週期回調(onPause/onStop)處理離開邏輯,才能撰寫穩健、符合平台規範的應用程式。