2011-12-19 7 views
6

Il problema è molto semplice. Devo simulare gli eventi del dpad (SU, GIÙ, DESTRA, SINISTRA, CENTRO) per navigare nella GUI composta da molti pulsanti e altri elementi. Con il simulatore D-Pad posso navigare senza questa linea GUI. Ma come posso farlo a livello di programmazione?Android: esiste un modo per simulare eventi D-Pad (API 10)?

ho provato un sacco senza successo:

  • KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_LEFT); View.dispatchKeyEvent(event); Non succede nulla (l'attenzione dovrebbe spostarsi un elemento a destra)

  • ho anche letto un sacco di windowManager.injectKeyEvent ma trovato niente che funzioni.

  • E anche la strumentazione può aiutare a simulare gli eventi chiave, ma più per testare, non per l'uso nell'applicazione stessa.

penso che ci sia una soluzione, perché Talkback può simulare il D-Pad fisico (http://code.google.com/p/eyes-free/source/browse/trunk/ime/latinime/src/com/googlecode/eyesfree/inputmethod/latin/LatinIME.java)

+0

ho trovato la soluzione Talkback, che lavora con InputConnection. final InputConnection ic = getCurrentInputConnection(); Ma devo inviare gli eventi chiave D-Pad da un'attività. – NitroBoarder

risposta

2

ho trovato la soluzione intelligente (ad esempio per andare giù):

bic=new BaseInputConnection(this.getWindow().getDecorView(),false); 
KeyEvent event2 = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN,0, KeyEvent.META_SYM_ON, 0, 0, KeyEvent.FLAG_VIRTUAL_HARD_KEY); 

bic.sendKeyEvent(event2); 

Questo è tutto , un algoritmo interno per trovare l'elemento successivo nella direzione selezionata

+0

Questo non funziona per me. sendKeyEvent restituisce sempre false che indica che "BaseInputConnection non è più valido". Qualunque cosa si supponga significhi. – vangorra

0

Provare a utilizzare KeyEvent.ACTION_UP anziché ACTION_DOWN. Risolto un problema simile per me.

1

Hai due modi per raggiungere il tuo obiettivo:

In primo luogo,

Instrumentation inst=new Instrumentation(); 
inst.sendKeyDownUpSync(int keycode); 

Prerequisiti: nello stesso processo.

In secondo luogo, per examble, wo desidera simulare KeyEvent.KEYCODE_DPAD_UP

getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_UP)); 

Prerequisiti: deve legarsi inputmethd

+0

Grazie, la seconda soluzione ha funzionato per me. – Hamid