【问题标题】:Catch keyboard input from barcode scanner从条形码扫描仪捕获键盘输入
【发布时间】:2019-01-08 06:41:07
【问题描述】:

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

扫描仪工作正常,如果我在应用程序上放置一个文本框并聚焦它,我扫描的条形码就会很好地写入它 - 但是如果应用程序没有聚焦在文本框上,我就无法捕捉输入(应用应该没有输入区域,只有图像和文本视图标签)。

扫描仪在输入 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 事件以将每个单独的键缓冲到静态变量中,然后在接收到特殊的输入终止字符并在结果?

【问题讨论】:

  • 以防万一:内置扫描仪的平板有SDK,可以直接访问条码数据吗?
  • 供应商没有提供任何 sdk 或相关信息。扫描仪组件显示为 Honeywell 品牌,所以如果无法从核心 Android 级别读取他们的输入,也许我可以在那里检查。
  • 如果无法找到 SDK(如果重新标记型号,通常搜索型号或类似设备的图像),您可以尝试使用 1x1 编辑文本来保持焦点并捕获隐藏输入。

标签: android barcode-scanner


【解决方案1】:
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;
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多