如何通过输入法服务将KeyEvent发送到Dialog或Spinner菜单?

shu*_*n11 5 android key-events android-softkeyboard android-input-method

我正在尝试实现一个输入方法服务,该服务接收远程客户端发送的意图,并响应那些发送适当的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));
}
Run Code Online (Sandbox Code Playgroud)

KeyEvents如在Simple Sofykeyboard Sample,发送它在家里工作Activities...但是当一个对话框或一个微调器的菜单在前景时它不起作用.

事件被发送到parent activity behind the Dialog.

有没有办法发送密钥和控制设备,如使用输入法的硬件密钥?

更好地解释我正在尝试做什么:

我有点写一个输入法,允许从远程控制设备.

我在一个客户端(我桌面电脑上的一个java应用程序)中编写一个命令(例如"UP"),设备上的服务器sendBroadcast()发送带有信息的意图,输入方法中的接收器获取它并调用keyDownUp在keycode对的DPAD_UP key. 它一般的作品,但是当我去到一个应用程序,显示一个对话框,该keyDownUp方法不将该键事件发送到dialog,例如用于选择是或否按钮,但它一直控制activty后面Dialog.

在这里, 我发现有同样问题的人...但没有答案......

Mac*_*rse 1

首先,让我解释一下我所理解的内容。

  • 您转到一个应用程序
  • 您在该活动中打开一个对话框(例如转到短信应用程序,长按一个线程)
  • 您按 HOME 键。
  • 转到发送意图的不同应用程序
  • IME 获取意图并写下一些内容。

我不明白如何再次打开带有对话框的活动。

AFAIK,当您按下软键盘中的某个键时,IMEonKey(int primaryCode, int[] keyCodes)会被调用,而当您按下硬键时,IME 会被调用:

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

您可以尝试调用该方法,但我不知道模拟硬键是否可以修复它。我猜这是一个焦点问题。您是否尝试过获取文本getCurrentInputConnection()以查看它所在的位置?