2

我目前正在开发一个模拟 d-pad(上、下、左和右)的应用程序。问题是我不知道如何将这些按键发送到其他应用程序。

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

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

此实现的问题在于,由于 android 安全功能,我无法将按键发送到其他应用程序。在搜索了注入按键的不同方法后,我遇到了这篇文章。但是,在尝试了示例代码之后,它似乎不起作用。我四处寻找,发现android似乎没有键盘输入设备。当我扫描不同的输入设备时,我会得到诸如方向传感器之类的东西。这是我手机(T-959 Galaxy S)上所有输入设备的图片。

输入设备

如您所见,这些设备都不是键盘。我有一种感觉,这是因为我的手机没有物理键盘。(cypress 是电容键,aries 是音量键,mxt224 是触屏控制器)

经过一番研究,我发现android中的accessibility api对注入事件有限制,但这些只是非常基本的东西,比如切换视图焦点等(AccessibilityNodeInfo)。但是,我有一种感觉,我可以扩展它以支持箭头键按下。

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

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

4

2 回答 2

4

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

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

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

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

希望这可以帮助。

于 2013-03-19T05:20:20.093 回答
0

如果您打算创建一个适用于无根手机的应用程序,那么您最好的选择是使用http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html实现一个新的 InputMethod

于 2013-03-19T14:32:21.147 回答