私は Android 開発に不慣れで、現在 Google Android オペレーティング システム (API レベル 11 == バージョン 3.0) 用のインプット メソッド エディター (IME) をプログラミングしています。
(次のコードは、問題を指摘するために単純化されています。)
次の方法で、基になるアプリケーションに文字を送信できます。
@Override
public final void onKey(final int primaryCode, final int[] keyCodes) {
this.getCurrentInputConnection().commitText(String.valueOf((char) primaryCode), 1);
}
ここで、特別なキーの組み合わせ (SHIFT + A など) を送信したいと考えています。この目標を達成するための Java コードは次のとおりです (SHIFT + A の特殊なケースの場合)。
@Override
public final void onKey(final int primaryCode, final int[] keyCodes) {
long eventTime = SystemClock.uptimeMillis();
this.sendDownKeyEvent(KeyEvent.KEYCODE_SHIFT_LEFT);
KeyEvent keyEvent = new KeyEvent(
eventTime,
eventTime,
KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_A, // ToDo: How to convert primaryCode to the corresponding KeyEvent constant?
KeyEvent.META_SHIFT_ON
);
this.getCurrentInputConnection().sendKeyEvent(keyEvent);
}
public final void sendDownKeyEvent(final int keyEventCode) {
InputConnection ic = this.getCurrentInputConnection();
if (ic != null) {
long eventTime = SystemClock.uptimeMillis();
ic.sendKeyEvent(
new KeyEvent(
eventTime, eventTime,
KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, 0, 0,
KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE
)
);
}
}
前のコード サンプルのコメントは、私の問題を示しています。KeyEventオブジェクトを介してキーの組み合わせを送信するには、変数primaryCode (押されたキーの Unicode コードを含む) をクラスKeyEventの定数に変換する必要があります。
この場合の便利な方法は既に存在しますか、それとも自分で作成する必要がありますか? 一般的に:キーの組み合わせを送信する上記のソリューションはエレガントですか、それともより良いアプローチが存在しますか? (インターネット上で Android IME の例を見つけるのは簡単ではありません...)
前もって感謝します!