安卓实现获取扫码硬件输入的返回内容

前言:需要改进的地方,敬请不吝赐教。

场景:

开发电子哨兵物联网设备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

最后修改:2022 年 11 月 26 日
如果觉得我的文章对你有用,请随意赞赏