java - 如何编写使用 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)上。最好的方法是什么?
解决方案
这样的游戏控制器可以像其他任何InputDevice
...
要么InputDevice.SOURCE_GAMEPAD
要么InputDevice.SOURCE_JOYSTICK
。
该文档还显示了这一点:
其中 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
推荐阅读
- php - 函数 Admin::edituser1() 的参数太少,在第 532 行的 C:\wamp64\www\pg\system\core\CodeIgniter.php 中传递了 0,而预期为 1
- java - jdbc ucanaccesssqlexception ucaexc ::: 4.0 4 意外令牌:DOCTOR
- html - 在 IE11 中完全不可点击的锚标签
- javascript - ajax 的问题。如何将javascript变量转换为php变量?
- azure - Power BI 许可证
- python - 如何将函数中的年月日传递给创建的相关目录?
- php - 如何使用 JMS 序列化器反序列化具有未知属性的 json?
- javascript - 设置值时日期更改
- verilog - 为什么线变量会导致连续赋值中的非法左侧?
- c# - 如何在 C# 中从 xml 文件中删除元素