当前位置: 首页 > 知识库问答 >
问题:

蓝牙硬键盘与条形码扫描仪在按键事件上的区别

越学文
2023-03-14

所以我有下面的代码,它区分软键盘输入和蓝牙条形码扫描仪...

               if(event.getAction()==KeyEvent.ACTION_DOWN){
                    if(event.getDeviceId()==-1) //from soft keyboard
                        return super.dispatchKeyEvent(event);

                    char pressedKey = (char) event.getUnicodeChar();
                    barCode += pressedKey;
                }
                if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                    if(event.getDeviceId()==-1) //from keyboard
                        return super.dispatchKeyEvent(event);

                    String giftCardUPC = barCode.replaceAll("[^\\d.]", "");
                    fragmentProShopGiftCard.etUPCCode.setText(giftCardUPC);
                    barCode="";
                }

这个想法是条形码扫描器有一个设备ID,而软键盘没有。现在的问题是我有一个活动,既支持硬蓝牙键盘,软键盘(如果他们不使用硬键盘),以及条形码扫描仪。

共有1个答案

宰父焕
2023-03-14

下面是我最后做的...我注意到条形码扫描仪的第一个条目总是一个keycode_left_shift的键码...

String barCode = "";
boolean barCodeMode = false;
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
                if(event.getAction()==KeyEvent.ACTION_DOWN){
                    if(event.getDeviceId()==-1) { //from soft keyboard
                        return super.dispatchKeyEvent(event);
                    }else if(event.getKeyCode() == KeyEvent.KEYCODE_SHIFT_LEFT || barCodeMode){ //from barcode scanner
                        barCodeMode = true;
                        char pressedKey = (char) event.getUnicodeChar();
                        barCode += pressedKey;
                    }else{ //from hard keyboard
                        return super.dispatchKeyEvent(event);
                    }
                }
                if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                    if(event.getDeviceId()==-1) { //from soft keyboard
                        return super.dispatchKeyEvent(event);
                    }else if(barCodeMode){ //from barcode scanner
                        String giftCardUPC = barCode.replaceAll("[^\\d.]", "");
                        fragmentProShopGiftCard.etUPCCode.setText(giftCardUPC);
                        barCode="";
                        barCodeMode = false;
                    }else{ //from hard keyboard
                        return super.dispatchKeyEvent(event);
                    }
                }

            }
 类似资料:
  • 我正在构建一个基本的价格检查应用程序,可以扫描条形码并显示产品信息,并试图在内置条形码扫描仪的Android平板电脑上运行它。 扫描仪可以工作,如果我把一个文本框放在应用程序上并对其进行聚焦,我扫描的条形码就会写在上面--然而,如果应用程序不对文本框进行聚焦,我就无法捕捉输入(应用程序应该没有输入区域,只有图像和文本视图标签)。 我查看了重写KeyUp和KeyDown事件,但它们似乎是为捕获单个键

  • 目前,我正在开发一个应用程序,使用条形码阅读器扫描条形码。条形码阅读器是Android公认的硬件键盘。这很好,我可以读条形码。但是当我阅读条形码时,AppBar中的汉堡包会被聚焦(见截图)。我怎么才能摆脱那个焦点标记?我试图将焦点设置为其他控件,但这不起作用。是否可以覆盖焦点标记的样式? 截图:http://postimg.org/image/7zmzzhstx/

  • 我正在用Java编程 我正在尝试编写代码,以识别用户是否在基于控制台的程序中按enter键。 我如何使用java做到这一点。有人告诉我,这可以使用Scanner或缓冲输入阅读器来完成。我不明白(或不知道如何使用)缓冲输入阅读器。 我试着用scanner来做这件事,但按了两次enter键后,程序终止,无法工作 谢啦 --编辑--以下代码使用字符串的方法而不是 如何做到这一点,使用缓冲输入读取器的好处

  • 我正在创建一个蓝牙扫描仪应用程序,并试图找到可用的设备配对。我有一个蓝牙耳机,我正试图找到运行android 10应用程序。 权限在清单中设置 应用程序包含一个简单的按钮,点击它我开始发现蓝牙设备 用于发现的回调 如果我错过了什么,有人能帮我吗?

  • 我正在为平板电脑开发一个android应用程序(SynchroDigital iNOSP10-4.0 RES型号),我想使用ZXing库扫描包含字符串的QRcode。它会在我需要时启动扫描仪,但我无法扫描任何东西。 实际上,如果我直接使用条形码扫描仪应用程序,它甚至不起作用,黄色的点出现了,但什么也没有发生,无论亮度、距离或二维码的复杂性(尝试使用一个只包含字母“a”的巨大二维码),它都不会起作用

  • 我有一个物理条形码扫描仪插入我的设备,我试图使用它扫描条形码太小,相机无法聚焦。 在我的活动中,这些是我用来检查按键的2个函数,因为我假设它是作为硬件键盘处理的。 什么能让它通过? 提前致谢