web-dev-qa-db-fra.com

Android simule la touche

Comment puis-je simuler par programme une pression sur un droïde? Je voudrais imiter une touche manuelle (apparaissant sur le droïde que quelqu'un appuie sur une touche mais que cela se fait par programmation). 

Il existe des solutions impliquant IWindowManager, mais ce n'est plus une option dans le nouveau SDK.

20
calcrisk33

Vous pouvez utiliser l'instrumentation, c'est-à-dire que le code suivant appelé depuis onCreate de votre activité entraînera l'ouverture et la fermeture du menu plusieurs fois:

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

... mais je ne suis pas sûr si c'est ce que vous recherchez

37
marcinj

Si vous avez une vue qui souhaite consommer l'événement, vous pouvez utiliser BaseInputConnection class et sa méthode sendKeyEvent .

Pour l'utiliser, vous devez spécifier une vue cible (par exemple, un EditText) qui recevra l'événement KeyEvent. Par exemple:

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

Le résultat est comme si l'utilisateur appuyait sur la touche # (tout en ayant le texte modifié en surbrillance).

5
tpaczesny

Vous pouvez également utiliser input text, c'est-à-dire:

De l'ordinateur via adb:

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

De Shell:

input text 'example\\@email.com'  
0
Pedro Lobito