繁体   English   中英

在Android中处理蓝牙条码扫描器

[英]Handling a bluetooth barcode scanner in Android

我有一个简单的Android应用程序,它允许用户将文本键入文本框(条形码),然后按一个按钮将其发送到服务器,并获得响应。

这很好用。

现在我想连接一个蓝牙条码扫描器并完成所有这些操作,而无需键入条形码或点击任何东西。

我能够轻松配对设备。 我可以轻松地将条形码扫描到文本框中。 但它不会发送(只是换行)。

我真正想做的是这样的事情:

  1. 在整个活动/视图(不仅仅是文本框)上监听任何keydown事件。 此活动/视图中没有其他输入框(对不起,如果我将这些内容混淆了)
  2. 如果它来自软键盘,请忽略。
  3. 如果它来自硬件键盘(即扫描仪)。 捕获值并将其存储在变量中。
  4. 当硬件键盘发送返回或制表符时,我将收集的条形码字符发送到服务器。

到目前为止,我没有太多运气。 覆盖视图的onKeyDown不会捕获任何内容。 我也没有尝试在布局上使用setOnKeyListener。

有人可以提供一些提示吗?

谢谢。

---编辑---

我设法覆盖了dispatchKeyEvent,它确实捕获了一些东西,但只有在按下回车键(KEYCODE_ENTER)时 - 而不是条形码的其余部分。

通过查看调试窗口,我可以看到有一个事件正在捕获整个条形码,但我无法访问它。 我在调试窗口中得到的是:

I/ViewRootImpl: ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_9, scanCode=10, metaState=0, flags=0x8, repeatCount=0, eventTime=821298066, downTime=821298066, deviceId=18, source=0x101 } to com.android.internal.policy.impl.PhoneWindow$DecorView{1f789e00 V.E..... R......D 0,0-1080,1920}

现在我只是使用dispatchKeyEvent - 当我检测到按下回车键时,我发送条形码(它已被放置在EditText中)。 不是理想的解决方案 - 我想在变量中捕获它。 但它是我现在能做的最好的事情。

如果有人能改进这一点,我会非常感激。

 See if the code below can be of help to you: 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; } }); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM