Как захватить ключ приложения с помощью onKeyDown в Android?

Я пытаюсь захватить ключ ключа приложения и домашний ключ на Android 3.1 и 4.0, но он не выглядит как его работа.

вот что я делаю

@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 клавиши?

обновленный код с правильным оператором return

Ответ 1

Um.

Ну, нет, вы не можете.

public static final int KEYCODE_HOME

Поскольку: Уровень API 1

Key code константа: главный ключ.

Этот ключ обрабатывается платформой и никогда не доставляется в приложения.

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

Ответ 2

Это может быть достигнуто с помощью отражения.

В классе android.os.ServiceManager имеется помощь com.android.internal.statusbar.IStatusBarService и содержит метод toggleRecentApps

И попробуйте этот здесь

Ответ 3

Отсутствует super.onKeyDown(keyCode, event), я думаю, вы должны попробовать следующее:

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