安卓实现获取扫码硬件输入的返回内容
前言:需要改进的地方,敬请不吝赐教。
场景:
开发电子哨兵物联网设备APP时需要获取扫码硬件输入的返回内容。
实现思路:
1、观察发现,每次扫完码后,机器会自动往输入框里面输入扫码结果,而且输入完成后会输入一个“回车”。
2、一开始想着是在APP内设置一个输入框,然后实时监听输入框的内容。
但是思考了一下如果这样获取扫码结果的话显然太麻烦了,又要设置输入框、设置焦点、设置监听,而且稳定性还有较大的优化空间。
当一件事只有一种解决方法,而且这个解决方法属于曲线营救的话,极大概率这个解决方法不是最优解,绝对有更优的方法。
3、突然联想到了js的键盘事件,安卓有没有这种事件呢?
搜索了一下,是有这种事件的。那么我们就可以直接监听这个键盘事件,从而获取到扫码结果,以“回车”作为结束获取的信号。这样就可以不用经过“输入框”这个“中间商”了,能省掉很多操作,而且稳定性也能得到了大幅提升。
实现代码:
//扫码结果
private StringBuilder scanCodeContentBuilder = new StringBuilder();
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (event.getUnicodeChar() != 0) {
char pressedKey = (char) event.getUnicodeChar();
scanCodeContentBuilder.append(pressedKey);
}
}
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
//获取扫码结果结束,调用扫码成功函数,插入扫码内容
//TODO 这里可以替换为自己的业务逻辑
scanCodeSuccess(scanCodeContentBuilder.toString());
//清除扫码结果
scanCodeContentBuilder = new StringBuilder();
return true;
} else {
return super.dispatchKeyEvent(event);
}
}
文章不足之处还请斧正!
本文By:NonNullPointer --2022/11/26