Делаю меню по переназначению хардварных кнопок. Столкнулся с тем, что код кнопки "Назад" не обрабатывается как нужно. Вот такой код работает (упрощённо, на примере переназначения кнопки Камера на кнопку Назад):
Код
import android.app.Instrumentation;
import android.view.KeyEvent;
private static Instrumentation mInstrument = new Instrumentation();
private static void KeyShortCut(KeyEvent event) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_CAMERA:
mInstrument.sendKeySync(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
mInstrument.sendKeySync(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
break;
}
}Андроид реагирует как положено. А вот такой код не хочет работать:
Код
import android.app.Instrumentation;
import android.view.KeyEvent;
private static Instrumentation mInstrument = new Instrumentation();
private static void KeyShortCut(KeyEvent event) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_CAMERA:
if (event.getAction() == KeyEvent.ACTION_DOWN) {
mInstrument.sendKeySync(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
} else if (event.getAction() == KeyEvent.ACTION_UP) {
mInstrument.sendKeySync(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
break;
}
}Нужен именно второй вариант, т.к. в первом никак не обработать долгое нажатие кнопки. При чём с остальными кодами кнопок (меню, домой, вверх, вниз) второй код работает отлично, затык только в коде кнопки назад. При чём судя по логу, андроид получает код кнопки, но почему то не реагирует на него. Весь код написан в системе (
PhoneWindowManager.java), т.е. с разрешениями и прочим проблем не должно возникнуть. Подскажите, чем обусловлено такое поведение?