Estoy programando en una aplicación de control remoto. Una de las tareas es inyectar personajes. El código que estoy usando actualmente tiene este aspecto:Inyectar caracteres no ingleses en 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);
}
}
que funciona perfectamente en caracteres ingleses (Los caracteres aparecen en cajas EditText). Sin embargo, si intento inyectar, p. Caracteres coreanos, esto falla. La función getEvents devuelve null, incluso cuando configuré el teclado y el idioma coreano.
sé que no es otro método para inyectar directamente cuerdas:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);
Esto no está funcionando bien - no hay caracteres que se muestran en cajas EditText, y onKeyMultiple() no se llama ya sea en mi actividad de prueba.
Esto es extraño, ya que dispatchKeyEvent() con el mismo evento funciona en mi actividad de prueba:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);
Mi aplicación de control remoto necesita para inyectar eventos no importa a qué actividad. Esto es posible usando Instrumentation (con android.permission.INJECT_EVENTS
y una firma con la clave de la plataforma).
¿Cómo puedo inyectar caracteres no ingleses usando instrumentación? ¿Hay alguna otra manera de lograr esto? P.ej. Usando dispatchKeyEvent (tiene que funcionar para otras actividades/aplicaciones también).
tengo el mismo problema por el momento. ¿Alguna idea a alguien? – Sprigg
suponiendo que 'm_KeyCharacterMap' es en realidad' keyCharacterMap'? –
tienes razón. Corregí el código. – kahlk