我正在編寫一個遠程控制應用程序。其中一項任務是注入字符。我目前使用的代碼如下所示:在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);
}
}
對英文字符(字符顯示在EditText框中)完美起作用。但是,如果我嘗試注入例如韓文字符,這失敗了。即使我配置了韓語和鍵盤,getEvents函數也會返回null。
我知道有直接注入串的另一種方法:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);
這不是工作要麼 - 沒有在EditText上框中顯示的字符,onKeyMultiple()不叫無論是在我的測試活動。
這是奇怪的,因爲dispatchKeyEvent()使用相同的事件工作在我的測試活動:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);
我的遙控器的應用程序需要注入事件,無論哪個活動。這可以使用Instrumentation(使用android.permission.INJECT_EVENTS
和帶有平臺密鑰的簽名)。
如何使用儀器注入非英文字符? 有沒有另外一種方法來完成這個?例如。使用dispatchKeyEvent(也必須適用於其他活動/應用程序)。
我現在有同樣的問題。任何想法的人?假設'm_KeyCharacterMap'實際上是'keyCharacterMap'? – Sprigg
? –
你是對的。我更正了代碼。 – kahlk