刷卡或者扫描的时候会直接把输入信息显示在edittext的问题?

天宇365 2019-05-27 04:25:16
android中
Fragment的输入焦点在 edittext上,
然后通过usb 输入设备,比如刷卡或者扫描枪:刷卡或者扫描的时候会直接把输入信息显示在edittext上,
通过什么方法监听 这个输入事件?
activity的dispatchKeyEvent和edt_code.setOnKeyListener都监听不到。
edt_code.setOnEditorActionListener 可以监听到,但应该是输入以后的事件。

目的:不希望直接显示在edittext中。会通过后台查询,然后设置
...全文
673 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
天宇365 2019-06-01
  • 打赏
  • 举报
回复
引用 10 楼 王能 的回复:
如果在Activity里面,dispatchKeyEvent不可能接收不到的,dispatchKeyEvent是事件的起始点。 如果你弹出了dialog或pop则找对应的dispatchKeyEvent
是很奇怪,输入框没有获得焦点时,dispatchKeyEvent是可以接收到,输入框获取焦点后,就拦截不到。但是我new 了新demo,又是可以拦截到,今天再排查下,可能和双屏异显的模式有关系~
朔爷 2022-03-21
  • 举报
回复
@天宇365 你好,问题解决了吗?我也遇到了这个问题
王能 2019-05-30
  • 打赏
  • 举报
回复
如果在Activity里面,dispatchKeyEvent不可能接收不到的,dispatchKeyEvent是事件的起始点。 如果你弹出了dialog或pop则找对应的dispatchKeyEvent
天宇365 2019-05-29
  • 打赏
  • 举报
回复
引用 8 楼 gxh_apologize 的回复:
[quote=引用 5 楼 天宇365 的回复:] [quote=引用 2 楼 gxh_apologize 的回复:]
/**
     * Activity截获按键事件.发给 BarcodeScannerResolver
     * dispatchKeyEvent() 和 onKeyDown() 方法均可
     *
     * @param event
     * @return
     */
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (CommonUtil.hasScanGun(event, this)) {
            if (mBarcodeScannerResolver != null) {
                mBarcodeScannerResolver.resolveKeyEvent(event);
            }
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (mBarcodeScannerResolver != null) {
            mBarcodeScannerResolver.resolveKeyEvent(event);
        }
        return super.onKeyDown(keyCode, event);
    }
光标在edittext中的时候, Activity中的以上2个方法均不会执行。 光标未在任何输入框内的时候是会执行dispatchKeyEvent方法,然后也是ok的。[/quote] 我之前项目设备是收银机,就是即插即用的,恰巧我们扫码页面都没有输入框,只是文本框,所以没考虑这个问题。直接使用了上面的方法。你可以参考下:文档[/quote] 我们也是收银机,之前的一版本也没有输入框,没有问题,现在有输入框了, 感谢哈,我去看看
gxh_apologize 2019-05-29
  • 打赏
  • 举报
回复
引用 5 楼 天宇365 的回复:
[quote=引用 2 楼 gxh_apologize 的回复:]
/**
     * Activity截获按键事件.发给 BarcodeScannerResolver
     * dispatchKeyEvent() 和 onKeyDown() 方法均可
     *
     * @param event
     * @return
     */
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (CommonUtil.hasScanGun(event, this)) {
            if (mBarcodeScannerResolver != null) {
                mBarcodeScannerResolver.resolveKeyEvent(event);
            }
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (mBarcodeScannerResolver != null) {
            mBarcodeScannerResolver.resolveKeyEvent(event);
        }
        return super.onKeyDown(keyCode, event);
    }
光标在edittext中的时候, Activity中的以上2个方法均不会执行。 光标未在任何输入框内的时候是会执行dispatchKeyEvent方法,然后也是ok的。[/quote] 我之前项目设备是收银机,就是即插即用的,恰巧我们扫码页面都没有输入框,只是文本框,所以没考虑这个问题。直接使用了上面的方法。你可以参考下:文档
天宇365 2019-05-29
  • 打赏
  • 举报
回复
引用 4 楼 小可可小可爱 的回复:
if (event.getAction() == KeyEvent.ACTION_UP) { 这个事件还是我尝试 N多次的结果 ,希望对你有帮助
除了setOnEditorActionListener,其他事件没进去,
天宇365 2019-05-29
  • 打赏
  • 举报
回复
引用 3 楼 小可可小可爱 的回复:
哈哈,你这个问题我用斑马手机端遇到过,上源码:自己整吧,检测 up 事件之后再取内容,去做校验,符合后台查询显示,不符合清除掉 ,里面keyCode 值自己根据自己的枪自己设置 borrowedSn.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View view, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_UP) { if (keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER || keyCode == KeyEvent.KEYCODE_ENTER || keyCode == 285 || keyCode == 286) { //条码扫码提交 if (isFastClick()) { postBorrowedSnSubmit(); } } } return false; } });
edittext和activity的setOnKeyListener事件监听不到,扫描时进不去,目前只有edt_code.setOnEditorActionListener 可以监听到,倒是可以在这个地方处理,只是会有点奇怪,也就是会出现这种现象:扫码后,自动填入了文本,然后我在这个事件后去查询相关信息,再来reset edittext的值,会出现设置完了又改成其他的文本现象。
天宇365 2019-05-29
  • 打赏
  • 举报
回复
引用 2 楼 gxh_apologize 的回复:
/**
     * Activity截获按键事件.发给 BarcodeScannerResolver
     * dispatchKeyEvent() 和 onKeyDown() 方法均可
     *
     * @param event
     * @return
     */
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (CommonUtil.hasScanGun(event, this)) {
            if (mBarcodeScannerResolver != null) {
                mBarcodeScannerResolver.resolveKeyEvent(event);
            }
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (mBarcodeScannerResolver != null) {
            mBarcodeScannerResolver.resolveKeyEvent(event);
        }
        return super.onKeyDown(keyCode, event);
    }
光标在edittext中的时候, Activity中的以上2个方法均不会执行。 光标未在任何输入框内的时候是会执行dispatchKeyEvent方法,然后也是ok的。
gxh_apologize 2019-05-28
  • 打赏
  • 举报
回复
/**
     * Activity截获按键事件.发给 BarcodeScannerResolver
     * dispatchKeyEvent() 和 onKeyDown() 方法均可
     *
     * @param event
     * @return
     */
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (CommonUtil.hasScanGun(event, this)) {
            if (mBarcodeScannerResolver != null) {
                mBarcodeScannerResolver.resolveKeyEvent(event);
            }
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (mBarcodeScannerResolver != null) {
            mBarcodeScannerResolver.resolveKeyEvent(event);
        }
        return super.onKeyDown(keyCode, event);
    }
  • 打赏
  • 举报
回复
if (event.getAction() == KeyEvent.ACTION_UP) { 这个事件还是我尝试 N多次的结果 ,希望对你有帮助
  • 打赏
  • 举报
回复
哈哈,你这个问题我用斑马手机端遇到过,上源码:自己整吧,检测 up 事件之后再取内容,去做校验,符合后台查询显示,不符合清除掉 ,里面keyCode 值自己根据自己的枪自己设置
borrowedSn.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP) {
if (keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER || keyCode == KeyEvent.KEYCODE_ENTER || keyCode == 285 || keyCode == 286) {
//条码扫码提交
if (isFastClick()) {
postBorrowedSnSubmit();
}

}
}

return false;
}
});
jzp12 2019-05-27
  • 打赏
  • 举报
回复
找到setText地方不就找到拦截的地方了么? 拦下来,查询了再设置

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧