Hi Hardy,

Did you ever find a solution for this?  I also have a signed app with 
INJECT_EVENTS permissions, and I want to be able to send any character 
(English or otherwise) on to various EditText fields, based on external 
input.



On Tuesday, May 29, 2012 3:06:43 AM UTC-5, Hardy Kahl wrote:
>
> I am programming on a remote control app. One of the tasks I am facing 
> is injecting characters. The code I am currently using looks like 
> this: 
>
>     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 = m_KeyCharacterMap.getEvents(chars); 
>     if (keyEvents != null) { 
>                 for (KeyEvent kev : keyEvents) { 
>                                instr.sendKeySync(kev); 
>                 } 
>     } 
>
> That works perfectly on english characters (The characters show up in 
> EditText boxes). However, if I am trying to inject e.g. korean 
> characters, this fails. The function getEvents returns null, even when 
> I have configured korean language and keyboard. 
>
> I know there is another mehtod for injecting strings directly: 
>
>     KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0); 
>     instr.sendKeySync(event); 
>
> This is not working either - no characters shown in EditText boxes, 
> and onKeyMultiple() is not called either in my test activity. 
>
> This is strange since dispatchKeyEvent() with the same event works in 
> my test activity: 
>
>     KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0); 
>     dispatchKeyEvent(event); 
>
> I believe injecting the string directly is the correct way. However, 
> using instrumentation it looks like the event is discarded somewhere 
> in Android. 
>
> The reason why I am not using dispatchKeyEvent is that I have to 
> inject events no matter which activity is in front, even it is not my 
> own activity. I think that is not possible using dispatchKeyEvent, is 
> it? 
> Using Instrumentation this is possible. At least with english 
> characters. (My app is signed with the platform key and I've got the 
> permission INJECT_EVENTS). 
>
> How am I supposed to inject non-english characters? Any ideas? I ran 
> out of ideas :( 
>
> Best Regards, 
> Hardy Kahl 
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to