如何区分androidKeyEvent和外接设备KeyEvent
How to distinguish between android KeyEvent and external device KeyEvent
我正在使用通过 USB 连接到 android 设备的外部设备阅读 barcodes/cards。
外部设备将它的输入作为 KeyEvent 发送到 Activity,我可以在 Activity
内的 dispatchKeyEvent()
方法中读取它,就像这样
@Override public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
externalDeviceService.onNewInputFromExternalDevice(((char) event.getUnicodeChar()));
}
return super.dispatchKeyEvent(event);
}
但是,例如,当关注某些 EditText
时,它会将外部设备输入输入到该输入字段,而不是仅仅委托给服务。
有没有办法区分来自 android 设备(软键盘)和来自外部设备(RFID 卡 reader 或条码扫描仪)的输入?
明显的解决方案是 keyEvent.getDevice().getName()
,并识别外部设备以适当地处理事件,但这将我绑定到特定设备,这是一个巨大的限制。也许有一种方法可以检查 KeyEvent
是否来自 android 软键盘?
如有任何见解,我们将不胜感激。
对于任何对未来感兴趣的人,我将 KeyEvents 从 dispatchKeyEvent()
发送到一些外部服务,如果下一个字符在前一个之后的指定时间内出现,则意味着它来自 scanner/rfid。在其他情况下,我将 KeyEvent 发送回 Activity 并调用 super.dispatchKeyEvent()
@编辑
另一种方法是从 UsbManager
获取 USB 连接设备列表。使用该列表来确定 KeyEvent 父级是否在该列表内以进行区分。需要注意的是,如果您连接硬件键盘,它会将 KeyEvents 视为来自 Barcode/RFID card Scanner
我正在使用通过 USB 连接到 android 设备的外部设备阅读 barcodes/cards。
外部设备将它的输入作为 KeyEvent 发送到 Activity,我可以在 Activity
内的 dispatchKeyEvent()
方法中读取它,就像这样
@Override public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
externalDeviceService.onNewInputFromExternalDevice(((char) event.getUnicodeChar()));
}
return super.dispatchKeyEvent(event);
}
但是,例如,当关注某些 EditText
时,它会将外部设备输入输入到该输入字段,而不是仅仅委托给服务。
有没有办法区分来自 android 设备(软键盘)和来自外部设备(RFID 卡 reader 或条码扫描仪)的输入?
明显的解决方案是 keyEvent.getDevice().getName()
,并识别外部设备以适当地处理事件,但这将我绑定到特定设备,这是一个巨大的限制。也许有一种方法可以检查 KeyEvent
是否来自 android 软键盘?
如有任何见解,我们将不胜感激。
对于任何对未来感兴趣的人,我将 KeyEvents 从 dispatchKeyEvent()
发送到一些外部服务,如果下一个字符在前一个之后的指定时间内出现,则意味着它来自 scanner/rfid。在其他情况下,我将 KeyEvent 发送回 Activity 并调用 super.dispatchKeyEvent()
@编辑
另一种方法是从 UsbManager
获取 USB 连接设备列表。使用该列表来确定 KeyEvent 父级是否在该列表内以进行区分。需要注意的是,如果您连接硬件键盘,它会将 KeyEvents 视为来自 Barcode/RFID card Scanner