最近做了个功能,类似于丰巢智能柜那种,扫码存货。
扫码枪是USB直插的,插上就可以用。扫码枪扫描到数据后相当于触发键盘点击事件,如果页面上有输入框的话,会把扫描到的数据输入到输入框里面。
但是呢,我们要做的是在页面没有输入框的情况下,获取到扫码枪扫描到的数据,这时候就要用到dispatchKeyEvent了。
override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
if (event?.action == KeyEvent.ACTION_DOWN) {
val char = event.unicodeChar.toChar()
sb.append(char)
}
if (event?.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER) {
//在这里面添加你自己的逻辑
Log.e("xxx","本次扫描到的数据:$sb")
sb.setLength(0)
}
return super.dispatchKeyEvent(event)
}当event.keyCode为KeyEvent.KEYCODE_ENTER也就是相当于按了一下回车,这就代表本次扫描结束,然后对数据做一些逻辑处理就行了(USB读卡器读取ID、IC卡同上)。
不过在页面上有输入框的情况下,这里获取到的数据都是空的,我猜测是键盘消费了这些事件。