私はリモコンアプリでプログラミングしています。タスクの1つは、文字を注入することです。私は現在、このようになりますを使用していますコード: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の使用(他のアクティビティやアプリケーションでも動作する必要があります)
現時点で同じ問題が発生しています。誰のアイデアですか? – Sprigg
'm_KeyCharacterMap'が実際に' keyCharacterMap'であると仮定しますか? –
あなたは正しいです。私はコードを修正しました。 – kahlk