通过Android设备处理条码扫描器的值

14

我正在尝试通过我的Android 3.2平板电脑处理来自条码扫描仪USB的值,扫描仪在操作系统中成功工作,但我希望在程序中获取该值而不需要使用edittext,usbmanager主机和附件未将其列在通过USB连接的设备列表中。


你使用哪种条形码扫描器?我也在做同样类型的项目,这对我很有帮助。 - Jaldip Katre
我也遇到了同样的问题。请在这里查看我的解决方案。 - MohamedHarmoush
5个回答

11
大多数插入式条形码扫描器(我见过的)都是作为HID配置文件设备制造的,因此无论它们连接到什么地方,都应该将它们视为键盘。我认为这就是它们不会显示在USB主机API附件列表中的原因。您应该能够通过覆盖Activity.onKeyDown(int keycode, KeyEvent ke)来从中获取原始输入,就像您在Activity内使用键盘一样。
在您的Activity中添加类似以下内容:
@Override
protected boolean onKeyDown(int keyCode, KeyEvent event) {
     Log.i("TAG", ""+ keyCode);
     //I think you'll have to manually check for the digits and do what you want with them.
     //Perhaps store them in a String until an Enter event comes in (barcode scanners i've used can be configured to send an enter keystroke after the code)
     return true;
 }

@BlackBird_K 有没有使用Arduino板作为通信中间人? - Jaldip Katre
1
我尝试过这个方法,它可以工作,但是我必须按条形码扫描仪上的按钮。我能否通过编程实现自动检测和扫描,这样用户就不需要手动按下按钮了? - Omar Faroque Anik
我有一个条形码扫描仪,在Marshmallow上发送Enter事件,但在IcreaCream上不发送...有什么想法吗? - DoruChidean

4

在Activity的keydown事件中,您将获得结果。

例如:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    char pressedKey = (char) event.getUnicodeChar();
    Barcode += "" + pressedKey;
    Toast.makeText(getApplicationContext(), "barcode--->>>" + Barcode, 1)
            .show();
    return true;
}

希望本文对您有所帮助。


0
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
    Log.i("TAG", event.getCharacters());
    return true;
}`

0

我也遇到了同样的问题,但是当我使用onKeyDown或onKeyUp时,它并不会每次都被调用,也就是说对于每个条形码字符都不会被调用。我使用了DiapatchKeyEvent,它很好地解决了这个问题。


1
也许您应该考虑提供一个例子? - Ulysse BN

0

dispatchKeyEvent 可以代替 onKeyDown。 因为,dispatchKeyEvent 如果有活动,将把事件传递给 onKeyListener。这时会调用 onKey

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
  int c=event.getUnicodeChar();
  Log.d("C:", "" + c);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接