Sto programmando su un'app di controllo remoto. Uno dei compiti è l'iniezione di caratteri. Il codice Attualmente sto usando assomiglia a questo:Iniezione di caratteri non inglesi su Android
Instrumentation instr = new Instrumentation();
String str="a";
// basically the same like calling instr.sendStringSync(str);
char[] chars = str.toCharArray();
KeyCharacterMap keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
KeyEvent[] keyEvents = keyCharacterMap.getEvents(chars);
if (keyEvents != null) {
for (KeyEvent kev : keyEvents) {
instr.sendKeySync(kev);
}
}
che funziona perfettamente su caratteri inglesi (I caratteri visualizzati in scatole EditText). Tuttavia, se sto cercando di iniettare per es. Caratteri coreani, questo fallisce. La funzione getEvents restituisce null, anche se ho configurato la lingua e la tastiera coreane.
So che c'è un altro metodo per iniettare direttamente le stringhe:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);
Questo non funziona neanche - non nell'immagine qui in scatole EditText, e onKeyMultiple() non è chiamato né nella mia attività di prova.
Questo è strano dato dispatchKeyEvent() con lo stesso evento opera nella mia attività di test:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);
mia app telecomando ha bisogno di iniettare eventi non importa a quale attività. Questo è possibile usando la strumentazione (con android.permission.INJECT_EVENTS
e una firma con la chiave della piattaforma).
Come posso inserire caratteri non inglesi utilizzando la strumentazione? C'è un altro modo per realizzare questo? Per esempio. Usando dispatchKeyEvent (deve funzionare anche per altre attività/app).
sto avendo lo stesso problema al momento. Qualche idea a qualcuno? – Sprigg
partendo dal presupposto che 'm_KeyCharacterMap' sia effettivamente' keyCharacterMap'? –
hai ragione. Ho corretto il codice. – kahlk