捕获来自条形码扫描仪的键盘输入

时间:2018-07-31 19:23:27

标签: android barcode-scanner

我正在构建一个基本的价格检查器应用程序,该应用程序可扫描条形码并显示产品信息,并试图在带有内置条形码扫描器的Android平板电脑上运行它。

扫描仪可以工作,并且如果我在应用程序上放置一个文本框并对其进行聚焦,则我扫描的条形码就可以写到上面了-但是,如果没有将应用程序聚焦在文本框上,我将无法捕获输入(应用程序应该没有输入区域,只有图像和textview标签。

扫描仪在输入的android设置上显示为HID键盘。

Almsot我在这里找到的所有帖子都是关于使用相机扫描条形码(使用此相机构建了我的原始原型,但性能不佳)。这里的一篇旧文章给了我提示,这样就可以覆盖dispatchKeyEvent

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getCharacters() != null && !event.getCharacters().isEmpty()) {
        isRunning = true;
        Log.d(TAG, "Starting");

        String barcode = event.getCharacters();
        new myImageTask().execute(barcode);
    }
    return super.dispatchKeyEvent(event);
}

但是似乎没有捕获任何输入。

我查看了覆盖的KeyUp和KeyDown事件,但是它们似乎是为捕获单个按键事件而明确构建的。

是否有另一个事件可以用来捕获并读取扫描器的完整输入,还是应该只链接KeyDown事件以将每个键缓冲到一个静态变量中,然后在收到一个特殊的输入终止字符并在结果?

1 个答案:

答案 0 :(得分:0)

看看下面的代码是否对您有帮助:

barcodeEditText.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                switch (keyCode)
                {
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_ENTER:
                            saveToDBMethod();
                            barcodeEditText.setText("");
                            barcodeEditText.requestFocus();
                        return true;
                    default:
                        break;
                }
            }

            return false;
        }
    });