我正在尝试实现一个输入方法服务,该服务接收远程客户端发送的意图,并响应那些发送适当的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我发现有同样问题的人......但没有回答......
答案 0 :(得分:1)
首先,让我解释一下我的理解。
我不明白如何再次打开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()
中的文字以查看它的位置?