Как захватить ключ приложения с помощью 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;
}