リモコンアプリでプログラミングしています。タスクの1つは、文字の挿入です。私が現在使用しているコードは次のようになります。
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);
私のリモートコントロールアプリは、どのアクティビティに関係なくイベントを挿入する必要があります。これは、インストルメンテーション(android.permission.INJECT_EVENTS
およびプラットフォームキー付きの署名)を使用して可能です。
インストルメンテーションを使用して英語以外の文字を挿入するにはどうすればよいですか?これを達成する別の方法はありますか?例:dispatchKeyEventの使用(他のアクティビティ/アプリでも機能する必要があります)。