Android симулирует нажатие клавиш - PullRequest
22 голосов
/ 02 января 2012

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

Существуют решения, включающие IWindowManager, но это больше не вариант в новом SDK.

Ответы [ 3 ]

38 голосов
/ 02 января 2012

Вы можете использовать инструментарий, т.е. следующий код, вызванный из 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();

... но я не уверен, что это то, что вы после

6 голосов
/ 01 февраля 2017

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

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

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

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

0 голосов
/ 14 февраля 2018

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

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

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

С shell:

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