Android имитировать нажатие клавиши

Как я могу программно имитировать нажатие клавиши на дроиде? Я хотел бы имитировать ручное нажатие клавиши (появляется на дроиде, что кто-то нажимает клавишу, но это делается программно).

есть решения, связанные с IWindowManager, но это больше не вариант в новом SDK.

3 ответов


вы можете использовать инструментарий, т. е. следующий код, вызванный из onCreate вашей деятельности, приведет к тому, что меню будет открываться и закрываться несколько раз:

    new Thread(new Runnable() {         
        @Override
        public void run() {
            try {
            Instrumentation inst = new Instrumentation();
            for ( int i = 0; i < 10; ++i ) {
                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
                Thread.sleep(2000);
                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
                Thread.sleep(2000);
            }
            }
            catch(InterruptedException e){
            }
        }   
    }).start();

...но я не уверен, что это то, что вы ищете


Если у вас есть представление, которое хочет использовать событие, вы можете использовать BaseInputConnection класса и его sendKeyEvent метод.

чтобы использовать его, вам нужно будет указать целевое представление (e.G EditText), который получит KeyEvent. Например:

EditText editText;
BaseInputConnection inputConnection = new BaseInputConnection(editText, true);
inputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POUND));

результат этого похож на то, что пользователь фактически нажал клавишу # (при фокусировке текста редактирования).


вы также можете использовать input text, Я.е:

С компьютера через adb:

adb shell input text 'example\@email.com'  

С shell:

input text 'example\@email.com'