首页 > 解决方案 > 如何编写使用 Sony Dualshock 4 控制器数字和模拟输入的 Android 应用程序?

问题描述

我用 java 创建了一个 Android 应用程序来通过蓝牙控制我的机器人,但是我需要一种更高级的方式来与我的机器人交互,而不是在手机或平板电脑上使用虚拟操纵杆和虚拟按钮。我有一个 Sony Dualshock 4 控制器,我想用它来通过我的 java android 应用程序控制我的机器人。

因此,我搜索了使用 USB OTG(usb 电缆)收听控制器数字和模拟输入事件的方法。

我看到本机 KeyEvent 可以工作,但只能使用数字输入。例如这个KeyEvent 常量

我还看到了一个名为Gamepad4j的库,但我没有设法使用它,而且它在 android 版本方面不符合我的要求。

所以我想要一种方法来在我的android设备上的android API 25(Android 7.1.1 Nougat)上用Java监听模拟事件(如操纵杆移动)和数字事件(如按下控制器上的按钮),或者如果不可能,在 API 28(Android 9.0 Pie)上。最好的方法是什么?

标签: javaandroidgamepad

解决方案


这样的游戏控制器可以像其他任何InputDevice...

要么InputDevice.SOURCE_GAMEPAD要么InputDevice.SOURCE_JOYSTICK

文档还显示了这一点:

图 1 显示了 Android 如何将键代码和轴值映射到大多数游戏控制器上的物理控件。

其中 1 是数字按钮:

AXIS_HAT_X, AXIS_HAT_Y, DPAD_UP, DPAD_DOWN, DPAD_LEFT, DPAD_RIGHT.

和 2/3 是模拟操纵杆:

AXIS_X, AXIS_Y,BUTTON_THUMBL

AXIS_Z, AXIS_RZ,BUTTON_THUMBR


推荐阅读