我正在编写一个 Android 应用程序来读取来自 HID USB 脚踏板的输入(按下踏板,获取消息,做某事)。
UsbManager 无法识别设备。脚踏板插入时可能会在 Android 内核中引发错误,因为我在 logcat 中看到此错误消息:“EventHub 无法获取 /dev/input/mouse0 的驱动程序版本,而不是打字机”
但是,我知道脚踏板可以工作,因为当我插入并按下它时,它会将焦点更改为活动上的下一个按钮......所以我知道它正在与我的 Nexus 平板电脑进行通信,显然它的默认操作是将焦点移动到下一个按钮/对象。我认为我的代码没有任何问题,因为它可以识别其他 USB 设备,而不是这个脚踏板。实际上,我可以通过检查焦点何时更改来判断它何时被按下,但这不适用于我想要的,因为该应用程序将作为服务在后台运行。我尝试为这个特定的 USB 设备设置一个意图过滤器(我知道它的产品 ID 和供应商 ID)。但是,它仍然显示没有连接的设备,并且应该要求用户确认启动应用程序的弹出消息从未出现。我'
有什么方法可以拦截来自该设备的输入,以便我可以知道何时踩下脚踏板,即使 Android 的 USB 管理器无法识别它?
为了完整起见,这是我的代码。我正在 Galaxy Nexus 10 平板电脑上进行测试:
public int list_usb_devices()
{
int device_count = 0;
UsbManager mUsbManager;
mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
String LOG_TAG = "USB";
for (UsbDevice device : mUsbManager.getDeviceList().values()) {
//This code is never reached...
Log.d(LOG_TAG, "Detected device: " + device.toString());
Log.d(LOG_TAG, "Model: " + device.getDeviceName());
Log.d(LOG_TAG, "Id: " + device.getDeviceId());
Log.d(LOG_TAG, "Class: " + device.getDeviceClass());
Log.d(LOG_TAG, "Protocol: " + device.getDeviceProtocol());
Log.d(LOG_TAG, "VendorId: " + device.getVendorId());
Log.d(LOG_TAG, "ProductId: " + device.getProductId());
CharSequence text = device.toString();
show_toast(text);
device_count++;
}
return device_count;
}