我正在构建一个基本的价格检查器应用程序,该应用程序可扫描条形码并显示产品信息,并试图在带有内置条形码扫描器的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事件以将每个键缓冲到一个静态变量中,然后在收到一个特殊的输入终止字符并在结果?
答案 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;
}
});