5

リモート クライアントから送信されたインテントを受信し、それらに応答して適切な KeyEvent を送信するインプット メソッド サービスを実装しようとしています。

私はinput method serviceこの方法で使用しています

private void keyDownUp(int keyEventCode) 
{
    getCurrentInputConnection().sendKeyEvent(
              new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode));
    getCurrentInputConnection().sendKeyEvent(
              new KeyEvent(KeyEvent.ACTION_UP, keyEventCode));
}

のように送信KeyEventsSimple Sofykeyboard Sample、ホームでは動作しActivities.ますが、ダイアログまたはスピナーのメニューがフォアグラウンドにある場合は動作しません。

イベントは に送信されますparent activity behind the Dialog

インプットメソッドからハードウェアキーを使用するように、キーを送信してデバイスを制御する方法はありますか?

私がやろうとしていることについてのより良い説明:

リモートからデバイスを制御できるようにする入力方法を書いています。

クライアント(デスクトップPC上のJavaアプリケーション)にコマンド(「UP」など)を書き込み、デバイス上のサーバーsendBroadcast()が情報とともにインテントを送信し、入力メソッドのレシーバーがそれを取得してkeyDownUpを呼び出します 通常は機能しますが、ダイアログを表示するアプリに移動すると、メソッドkeycodeはキーイベントを に送信しません。たとえば、[はい] または [いいえ] ボタンを選択しますが、.DPAD_UP key.keyDownUpdialogactivtyDialog

ここで 私は同じ問題を抱えている人を見つけました...しかし答えはありません...

4

1 に答える 1

1

まず、私が理解したことを説明させてください。

  • あなたはアプリに行きます
  • そのアクティビティでダイアログを開きます (たとえば、SMS アプリに移動し、スレッドを長押しします)
  • HOMEキーを押します。
  • インテントを送信する別のアプリケーションに移動します
  • IME は意図を取得し、何かを書き留めます。

ダイアログを使用したアクティビティが再び開かれる方法がわかりません。

私の知る限り、ソフトキーボードのキーをonKey(int primaryCode, int[] keyCodes)押すとIMEが呼び出され、ハードキーを押すとIMEが呼び出されます:

  • public boolean onKeyUp(int keyCode, KeyEvent event)
  • public boolean onKeyDown(int keyCode, KeyEvent event)

代わりにそのメソッドを呼び出すこともできますが、ハード キーをエミュレートすることで問題が解決するかどうかはわかりません。ピントの問題だと思います。からテキストを取得してgetCurrentInputConnection()、それが立っている場所を確認しようとしましたか?

于 2010-04-11T12:20:46.090 に答える