Важно возвращать true, если вы обработали событие, но если вы не обработали событие, хорошо убедиться, что событие все еще обрабатывается суперклассом. Вот код из моего приложения:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
changeColor(keyCode);
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
// do nothing
return true;
}
return super.onKeyUp(keyCode, event);
}
В моем случае вызов суперкласса был необходим, чтобы другие аппаратные кнопки на моем устройстве продолжали работать.