2012-01-02 3 views
16

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

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

+0

Испытание приборов, модифицируя приложение реагировать на что-то другое, чем фактические штрихи и «укоренение» устройства для ввода событий на уровне Linux - это ваши 3 варианта. –

ответ

32

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

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

+4

это именно то, что я ищу, но ... это не аппаратура строго для тестирования? Я ищу решение, которое я могу использовать в реальном приложении, а не тестирование. заранее спасибо. – calcrisk33

+0

@ calcrisk33 Мне не удалось найти информацию о том, является ли это жизнеспособным решением для живого приложения. Вы в конечном итоге использовали его таким образом? – Kirk

+1

@ Kirk Я сделал, и он очень хорошо работал для имитации нажатия клавиши/нажатия. – calcrisk33

0

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

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

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

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

0

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

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

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

От shell:

input text 'example\\@email.com' 
Смежные вопросы