2011-12-20 63 views
2

我想捕捉應用程序切換鍵和主鍵在Android 3.1和4.0,但它似乎並不像它的工作。如何在Android中使用onKeyDown捕獲應用切換鍵?

這裏是我在做什麼

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (KeyCode == KeyEvent.KEYCODE.KEYCODE_APP_SWITCH && event.getRepeatCount() == 0) 
    { 
     Log.d ("onkeydown","app switch key"); 
    } 
    else if (KeyCode == KeyEvent.KEYCODE.KEYCODE_HOME && event.getRepeatCount() == 0) 
    { 
     Log.d ("onkeydown","home key"); 
    } 
    //EDIT: 
    return super.onKeyDown(keyCode, event); 
} 

我log.d語句不打印。是否有可能捕獲這兩個鍵?

帶正確返回語句的更新代碼

回答

2

Um。

嗯,不,你不能。

公共靜態最終詮釋KEYCODE_HOME

自:API等級1

鍵代碼常數:Home鍵。

此密鑰由框架處理,永遠不會傳遞給應用程序。

http://developer.android.com/reference/android/view/KeyEvent.html

+0

怎麼樣KEYCODE_APP_SWITCH。爲什麼這個不被捕獲? – Abid 2011-12-20 18:13:22

+0

我會*認爲* Home Activity或OS框架已經捕獲了該密鑰,並且您無法接收該事件。畢竟,它寧可打敗擁有這樣一把鑰匙的目的。 – BRFennPocock 2011-12-20 18:24:01

+0

其煩人...的onkeydown甚至沒有調用app_switch按下:( – Abid 2011-12-20 18:48:52

0

super.onKeyDown(的keyCode,事件)丟失,我想你應該試試這個:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
super.onKeyDown(keyCode, event); 

    if (KeyCode == KeyEvent.KEYCODE.KEYCODE_APP_SWITCH && event.getRepeatCount() == 0) 
    { 
     Log.d ("onkeydown","app switch key"); 
    } 
    else if (KeyCode == KeyEvent.KEYCODE.KEYCODE_HOME && event.getRepeatCount() == 0) 
    { 
     Log.d ("onkeydown","home key"); 
    } 
    return true; 
} 

做同樣使用switch語句:

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
    super.onKeyDown(keyCode, event); 
     switch(keyCode) 
     { 
      case KeyEvent.KEYCODE_CAMERA: 
      Toast.makeText(ListViewActivity.this, "Pressed Camera Button", Toast.LENGTH_SHORT).show(); 
       return true; 
      case KeyEvent.KEYCODE_1: 
      Toast.makeText(ListViewActivity.this, "Pressed 1", Toast.LENGTH_SHORT).show(); 
       return true; 
      case KeyEvent.KEYCODE_HOME: 
      Toast.makeText(ListViewActivity.this, "Pressed Home Button", Toast.LENGTH_SHORT).show(); 
       return true; 

      case KeyEvent.KEYCODE_BACK: 
      Toast.makeText(ListViewActivity.this, "Pressed Back Button", Toast.LENGTH_SHORT).show(); 
       finish(); 
       return true; 
     } 

     return false; 
    } 
+0

我試圖super.onKeyDown(的keyCode,事件)。同樣的結果。這是什麼,當我按下應用切換鍵的onkeydown不會被調用。我有有趣斷點...嗯 – Abid 2011-12-20 18:21:23

+0

你能提供更多的示例代碼,您可能會丟失的東西,我猜。 – 2011-12-20 18:24:48

+0

的問題解決了,我想?? – 2011-12-20 18:28:43

0

它c用反射來實現。

它是下具有AIDL com.android.internal.statusbar.IStatusBarServiceandroid.os.ServiceManager類,它包含toggleRecentApps方法

而且也試試這個method here