在android中模拟箭头键按下

时间:2013-03-19 04:12:08

标签: android key inject arrow-keys

我目前正在开发一款模拟d-pad(向上,向下,向左和向右)的应用。问题是我无法弄清楚如何将这些按键发送到其他应用程序。

目前,我正在使用Instrumentation,它在我的应用程序的活动中运行得非常好。 这是左侧箭头键的代码片段:

new Thread(new Runnable() {         
                    @Override
                    public void run() {                 
                        new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
                    }   
                }).start();

此实现的问题在于,由于Android安全功能,我无法将按键发送到其他应用程序。 在搜索了不同的注入按键的方法之后,我遇到了这个article。但是,在尝试示例代码后,它似乎不起作用。我戳了一下,发现android似乎没有键盘的输入设备。当我扫描不同的输入设备时,我会收到方向传感器等信息。这是我手机上所有输入设备的图片(T-959 Galaxy S)。

input devices

如您所见,这些设备都不是键盘。我觉得这是因为我的手机没有物理键盘。 (柏树是电容式按键,白羊座是音量按键,而mxt224是触摸屏控制器)

经过一番研究后,我发现android中的可访问性api具有注入事件的限制功能,但这些只是非常基本的事情,如切换视图焦点等(AccessibilityNodeInfo)。但是,我有一种感觉,我可以将它扩展为支持按箭头键。

目前,我对去哪儿感到很困惑。有没有人以前做过这样的事情?由于Android中的安全功能,似乎简单地注入箭头键(没有别的)是非常令人沮丧的。欢迎所有建议。

编辑:我可能不是很清楚,但我只能为root用户手机构建这个。唯一的要求是这个应用程序必须在手机上独立运行,而不是通过otg或计算机通过adb连接到任何外部键盘。

2 个答案:

答案 0 :(得分:4)

我想在几天前模拟DPAD按键事件,我确实找到了一个有其自身限制的解决方案。

可以使用 adb 命令input keyevent <keycode>模拟箭头键按下。 因此,如果您想模拟DPAD LEFT键,请使用adb命令adb input keyevent 21

为了重复使用这段代码并将其向前扩展,我创建了一个独立的swing应用程序,我选择了我需要发送键事件的设备,我可以使用计算机的现有键盘输入密钥。 [我将键盘键码映射到android键码]。

我通过包含远程和游戏手柄按钮进一步扩展应用程序,一旦完成,我将在git上传项目。

希望这有帮助。

答案 1 :(得分:0)

如果您打算创建一个适用于非root手机的应用程序,或许最好的办法是使用http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html

实现一个新的InputMethod