Files
TestXboxControl/README.md
2025-12-11 23:34:17 +08:00

57 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 通过游戏控制器
我测试通过[官方文档](https://developer.android.com/develop/ui/views/touch-and-input/game-controllers/controller-input?hl=zh-cn)方式检查设备是无法获取到相关设备的
```java
val deviceIds = InputDevice.getDeviceIds()
deviceIds.forEach { it->
run {
InputDevice.getDevice(it)?.let { device ->
run {
Log.e("USB", "设备ID${device.id} , 设备vid:${device.vendorId} , 设备pid:${device.productId}")
}
}
}
}
```
这里通过插拔设备打印的设备信息列表都是一致的。且没有弹窗申请。
# 通过USB设备获取
通过Steam Link 观察到它的连接方式是用USB Host模式
可以参考[官方文档](https://developer.android.com/develop/connectivity/usb/host?hl=zh-cn)
通过Demo的`通过USB设备获取`按钮可以观察到能在插拔USB设备的情况下打印不同的列表
![usb_host](./doc/PixPin_2025-12-11_23-24-54.png)
```java
usbManager = getSystemService(USB_SERVICE) as UsbManager
usbManager.deviceList?.forEach { it ->
run {
Log.d("USB", "设备ID${it.value.deviceName} , 设备vid:${it.value.vendorId} , 设备pid:${it.value.productId}")
sb.append("设备ID${it.value.deviceName} , 设备vid:${it.value.vendorId} , 设备pid:${it.value.productId}\n")
if (it.value.productId == pid && it.value.vendorId == vid) {
requestPermission(it.value)
}
}
}
fun requestPermission(device: UsbDevice) {
val permissionIntent = PendingIntent.getBroadcast(
this,
0,
Intent(ACTION_USB_PERMISSION),
PendingIntent.FLAG_IMMUTABLE
)
if (usbManager.hasPermission(device)) {
connectUsb(device)
} else {
usbManager.requestPermission(device, permissionIntent)
}
}
```
## 总结
建议新增使用USB方式获取手柄信息我估计SteamLink能响应我之前反馈的PS手柄的PS按键也是采用该方案。