2011-05-06 202 views
0

使用setOnKeyListener我能夠偵聽除Home和End按鈕之外的所有物理按鈕,是否有可能捕捉到Home按鈕的動作。主頁按鈕偵聽器

+4

我很確定你不能覆蓋Home。你爲什麼想要? – 2011-05-06 05:29:13

+0

在我的應用程序中,我正在閱讀一些不應該被任何第三人訪問的重要文件,如果我正確地退出該應用程序是不可能的,但是當用戶從該活動中按Home時,可以打開該活動搜索。 – Vignesh 2011-05-06 06:42:21

+1

捕捉主頁按鈕的方法無效。您應該遵循活動生命週期並查看用戶按Home按鈕時發生的情況。 – Zelimir 2011-05-06 07:12:22

回答

2

您不需要捕捉主頁按鈕。如果用戶按Home並且其他一些活動出現在前臺,則您的應用程序將轉到後臺並在您當前的活動中調用onPause()。你可以重寫該函數來清理搜索字符串或任何你需要的東西。

UPDATE:

更乾淨的解決方案是在開始這一關鍵活動時使用標誌FLAG_ACTIVITY_NO_HISTORY。所以,當你的活動去後臺系統將適當地關閉它。

+0

Hi Zelimir,我在onStop()函數裏面調用了finish()函數,所以它的工作原理卻顯示Sorry對象應用程序意外停止。 – Vignesh 2011-05-06 07:27:33

+0

第一行應該是super.onPause();然後你可以調用finish()。如果這沒有幫助,請發佈包含有用信息的錯誤報告的首行爲什麼發生。 – Zelimir 2011-05-06 07:50:03

+0

嗨Zelimir,完成()內onPause()完成方向更改期間的活動,所以我給它在onStop(),我很抱歉應用程序意外關閉。 – Vignesh 2011-05-09 04:19:19

1

您想要使用public boolean dispatchKeyEvent(KeyEvent event),如下所述:http://developer.android.com/reference/android/app/Activity.html#dispatchKeyEvent%28android.view.KeyEvent%29

使用它,像這樣:

@Override 
     public boolean dispatchKeyEvent(KeyEvent event) 
     { 
    // do whatever you want to do here, then return true if you handled the key code 
if (event.getAction() == KeyEvent.ACTION_DOWN) { 
      switch (event.getKeyCode()) { 
      case KeyEvent.KEYCODE_BACK: 
       mBackDown = true; 
       return true; 
      case KeyEvent.KEYCODE_HOME: 
       mHomeDown = true; 
       return true; 
      } 
} 
    return super.dispatchKeyEvent(event); // let the default handling take care of it 
    } 

讓我知道這是否爲你的作品。

編輯:不知道爲什麼這不適合你,但沒有看透你的代碼的其餘部分,這將很難分辨究竟是怎麼回事。但是,對於您的任務,我建議您使用finishOnTaskLaunch清單屬性,如http://developer.android.com/guide/topics/manifest/activity-element.html#finish所述:正確使用(將其設置爲true),這將確保如果您的活動重新啓動,它將關閉任何現有實例。

+0

嗨Femi,它仍然不適用於家庭,終端和電源按鈕。 – Vignesh 2011-05-06 07:06:19

+0

奇數:這對我很有用,至少在Home和Back按鈕中有效。我不確定END按鈕:不知道END有一個物理按鈕。另外,對於HOME,您可能需要將您的活動設置爲主屏幕(否則我相信Android會過濾掉該按鍵)。我不認爲你可以捕獲POWER按鈕:在我看來,這將是一個主要的安全問題:有人可能會寫一些拒絕讓你關閉設備的東西。所以你可能在電源按鈕上運氣不好。 – Femi 2011-05-06 13:15:38

+0

嗨Femi,我不需要聽結束按鈕或電源按鈕,我只想聽只有主頁按鈕,我只是告訴你,家庭,結束和權力不工作的聽衆。 – Vignesh 2011-05-09 04:16:51

1

這是唯一可能的,如果你修改主要的android源代碼。雖然這不建議用於應用程序目的。但更多的隱藏菜單。

public static final int KEYCODE_HOME 

Since: API Level 1 
Key code constant: Home key. This key is handled by the framework and is never delivered to applications. 
Constant Value: 3 (0x00000003) 
3

你可以試試這個在Android 4.0以上版本:
1.註冊一個BroadcastReceiver爲Intent.ACTION_CLOSE_SYSTEM_DIALOGS。
2.調用Intent.getStringExtra(「reason」)來獲取原因。原因如下:
家庭按鍵的「homekey」按下;
「幫助」長按Home鍵;