2012-01-02 20 views
16

¿Cómo puedo simular mediante programación una pulsación de tecla en un Droid? Me gustaría imitar una pulsación manual de tecla (que aparece en el droide que alguien está presionando una tecla, pero se está haciendo mediante programación).Android simular la pulsación de tecla

Existen soluciones que implican IWindowManager, pero eso ya no es una opción en el nuevo SDK.

+0

La instrumentación de prueba, la modificación de la aplicación para responder a algo que no sea los toques reales y el "enraizamiento" del dispositivo para inyectar eventos en el nivel de Linux son sus 3 opciones. –

Respuesta

32

Puede utilizar la instrumentación, es decir siguiente código llamado desde onCreate de su actividad causará menú para abrir y cerrar varias veces:

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(); 

... pero no estoy seguro si esto es lo que eres después de

+4

esto es exactamente lo que estoy buscando pero ... ¿no es la instrumentación estrictamente para las pruebas? Estoy buscando una solución que pueda usar en una aplicación en vivo, sin pruebas. gracias por adelantado. – calcrisk33

+0

@ calcrisk33 No he podido encontrar ninguna información sobre si esta es o no una solución viable para una aplicación en vivo. ¿Terminaste usándolo de esa manera? – Kirk

+1

@Kirk Lo hice y funcionó muy bien para simular una pulsación/pulsación de tecla. – calcrisk33

0

Si tiene una vista que desea consumir el evento, puede usar la clase BaseInputConnection y su método sendKeyEvent.

Para usarlo, deberá especificar una vista de destino (por ejemplo, un Texto de edición) que recibirá el evento clave. Por ejemplo:

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

El resultado de esto es como el usuario que realmente se pulsa la tecla # (mientras que la edición de texto centrado).

0

También puede utilizar input text, es decir:

desde la computadora vía adb:

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

De shell:

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