1.交换方式的选择。 API说明。2.在1C方面实现API。3. BroadcastReceiver。 我们得到数据4. OnKeyUp。 具有键盘仿真功能的条形码扫描仪
这篇文章应该是最短的。 但是魔鬼在细节上。 这里有一些事实。
事实1.如果我们在表单上有几个
EditText
字段,并且我们全部覆盖了
OnKeyListener
,则onKeyUp和onKeyDown将被着色并不再被调用。 代号
class MainActivity : AppCompatActivity() { var keyListener: View.OnKeyListener = View.OnKeyListener { _, _, _ -> true} override fun onCreate(savedInstanceState: Bundle?) { val editBarcode = findViewById(R.id.editBarcode) editBarcode.setOnKeyListener (keyListener) val editQuantity: EditText = findViewById(R.id.editQuantity) editQuantity.setOnKeyListener(keyListener)
它遵循
事实 onKeyUp
和
onKeyDown
仅适用于未重新定义OnKeyListener的字段。 而且只有在这个领域。
事实3.如果将1.1.1版的ATOL Lite.Droid设置为前缀,则不会传递KeyEvent = KEYCODE_TAB。 前缀1和前缀2都没有。 我没有在后缀中尝试。 那里不需要他。
事实4. onKeyUp,onKeyDown,setOnKeyListener-仅侦听硬件单击。 键盘,具有键盘仿真功能的扫描仪,奇怪的是,屏幕上的后退按钮也是硬件按钮(KEYCODE_BACK)。 TSD上的数字按钮(物理)是软按钮。 为什么会这样,我听不懂:)好吧,好吧。
现在有点理论。
内置的条形码扫描仪无法发送广播。 并且有带有键盘仿真功能的条形码扫描仪。 我认为这种方法也适合他们。 在两种情况下,我建议您将“前缀”设置为例如等于
"="(KEYCODE_EQUALS)
。 并将后缀替换为
"CR"(KEYCODE_ENTER)
。 删除所有其他后缀和前缀。 大多数在标准设置中具有键盘模拟功能的扫描仪都没有前缀,但是他们很乐意提供
CRLF
(两个字符。回车,换行)。 看起来这是历史上发生的事情。
现在执行本身。 在MainActivity类中,创建两个变量。 第一个负责条形码字符的级联,第二个负责将条形码收集在前缀和后缀之间的一行中。
val barcodeStringBuilder = StringBuilder() var isReadingBarcode = false
并且在该类中,您需要重写
onKeyUp
函数
。 override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
仅此而已。 与往常一样,欢迎发表评论和添加内容。