Вы, похоже, рассматриваете onKeyDown как один из ваших методов on.
return super.onKeyDown(keyCode, msg);
Это плохая вещь, как будто вы вызвали эту функцию и хотите вернуть, какая клавиша была нажата. Измените его так, чтобы оно просто возвращало false, что будет означать, что вы обрабатываете то, что делает клавиатура.
EDIT
Есть ли причина, по которой вы используете onKeyDown, а не onKey? Вот некоторый дополнительный код, который я использую, он использует массив логических значений (selectedKeys длиной 128), и вы можете позже использовать его для проверки массива, чтобы увидеть, нажата ли клавиша
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == android.view.KeyEvent.ACTION_DOWN)
{
if(keyCode > 0 && keyCode < 127)
pressedKeys[keyCode] = true;
}
if (event.getAction() == android.view.KeyEvent.ACTION_UP)
{
if(keyCode > 0 && keyCode < 127)
pressedKeys[keyCode] = false;
}
keyEventsBuffer.add(keyEvent);
}
return false;
}
Итак, с этим вы можете сказать
If(pressedKeys[KeyYouWantToCheck])
{
//Do some stuff if that key is down
}