我正在读取条形码/卡与外部设备连接到android设备通过USB。
外部设备将其输入作为KeyEvent发送到活动,我可以在dispatchKeyEvent()方法中读取Activity中的输入,如下所示
@Override public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
externalDeviceService.onNewInputFromExternalDevice(((char) event.getUnicodeChar()));
}
return super.dispatchKeyEvent(event);
}但是,例如,当关注某些EditText时,它会将外部设备输入输入到该输入字段,而不是仅仅委托给服务。
有没有办法区分输入从android设备(软键盘)和外部设备(RFID读卡器或条形码扫描仪)?
显而易见的解决方案是keyEvent.getDevice().getName(),并识别外部设备以适当地处理事件,但这会将我绑定到特定的设备上,这是一个巨大的限制。也许有一种方法可以检查KeyEvent是否来自安卓软键盘?
如对此有任何见解,将不胜感激。
发布于 2018-04-17 16:59:37
对于任何对未来感兴趣的人,我将KeyEvents从dispatchKeyEvent()发送到一些外部服务,如果下一个字符在前面指定的时间内出现,这意味着它来自扫描仪/射频识别。在其他情况下,我将KeyEvent发送回活动并调用super.dispatchKeyEvent()
@Edit的另一种方式是从UsbManager获取USB连接的设备列表。使用该列表确定KeyEvent父级是否在该列表中以进行区分。请注意,如果您连接硬件键盘,它会将KeyEvents视为来自条形码/RFID卡扫描仪的产品。
https://stackoverflow.com/questions/49862952
复制相似问题