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

时间:2010-04-11 11:29:47

标签: android android-softkeyboard android-input-method key-events

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

KeyEvents中发送Simple Sofykeyboard Sample,它可以在家中,在Activities.中使用..但是当对话框或菜单时它不起作用一个微调器在前景中。

事件将发送到parent activity behind the Dialog

有没有办法发送密钥并控制设备,就像使用输入法中的硬件密钥一样?

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

我正在编写一种输入法,可以从远程控制设备。

我在客户端(桌面PC上的java应用程序)中写入命令(例如“UP”),设备上的服务器sendBroadcast()发送带有信息的意图,以及输入方法获取它并使用keycode的{​​{1}}调用keyDownUp 它通常有效,但当我转到显示对话框的应用程序时,DPAD_UP key.方法不会将关键事件发送到keyDownUp,例如选择是或否按钮,但它保持控制dialog背后的activty

Here我发现有同样问题的人......但没有回答......

1 个答案:

答案 0 :(得分:1)

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

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

我不明白如何再次打开Dialog的活动。

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

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

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