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... 中发送,但是当 Dialog 或 Spinner 的菜单位于前台时,它不起作用。

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

有没有办法像使用输入法中的硬件键一样发送键和控制设备?

更好地解释我正在尝试做的事情:

我正在编写一种允许从远程控制设备的输入法。

我在客户端(台式电脑上的 java 应用程序)中编写命令(例如“UP”),设备上的服务器sendBroadcast()发送带有信息的意图,输入法中的接收器获取它并调用 keyDownUp它通常keycode可以DPAD_UP key. 工作,但是当我转到显示对话框的应用程序时,该keyDownUp方法不会将键事件发送到dialog,例如选择是或否按钮,但它会继续activty控制Dialog.

在这里 我找到了有同样问题的人......但没有答案......

4

1 回答 1

1

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

  • 你去一个应用程序
  • 您在该活动中打开一个对话框(例如转到短信应用程序,长按一个线程)
  • 你按下 HOME 键。
  • 转到发送意图的其他应用程序
  • IME 得到意图,并写下一些东西。

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

AFAIK,当您按下软键盘中的一个键时,将调用 IME onKey(int primaryCode, int[] keyCodes),当您按下硬键时,将调用 IME:

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

您可以尝试调用该方法,但我不知道模拟硬键是否可以解决它。估计是焦点问题。您是否尝试过获取文本getCurrentInputConnection()以查看它的位置?

于 2010-04-11T12:20:46.090 回答