7

リモコンアプリでプログラミングしています。タスクの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の使用(他のアクティビティ/アプリでも機能する必要があります)。

4

2 に答える 2

2

上記の部分は追加情報として残します。私は解決策を見つけました。root権限が必要ですが、アプリケーションキーで署名できれば問題ないと思います。できることは、Virtual.kcm ファイル (/system/usr/keychars/Virtual.kcm) を編集することです。これは、デフォルトのキー キャラクター マップ (kcm) です。新しい kcm から KeyEvents を生成できるため、任意の文字を追加してから Instrumentation.sendStringSync(String string) メソッドを使用できます。

電話で kcm を編集する際に問題が発生したため、コンピューターにコピーし、そこで編集してから、デバイスにコピーし直しました。

これが役立つことを願っています!


このリンクでは、次のコンテンツが表示されます。設定で何を選択しても、仮想キーボードには US keyCharacterMap とレイアウトがあるようです。これを解決する方法を見つけることができませんでした。

Language Note

Android does not currently support multilingual keyboards. Moreover, the built-in generic key character map assumes a US English keyboard layout.

OEMs are encouraged to provide custom key character maps for their keyboards if they are designed for other languages.

Future versions of Android may provide better support for multilingual keyboards or user-selectable keyboard layouts.
于 2013-03-13T09:54:14.937 に答える