android在按键事件上区分蓝牙硬键盘和条形码扫描仪

时间:2018-11-09 21:15:07

标签: android

所以我有以下代码,用于区分软键盘输入和蓝牙条形码扫描器...

               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,而软键盘则没有。现在的问题是,我有一个活动同时支持HARD蓝牙键盘,软键盘(如果他们不使用硬键盘)以及条形码扫描仪。

有什么方法可以区分dispatchKeyEvent上的两个硬件设备吗?

2 个答案:

答案 0 :(得分:0)

如果活动(或上一个活动或片段)中的其他字段需要用户执行手动输入,则可以在此处检查并保存设备ID,然后将其与用于您感兴趣的输入。

另一种可能性是记录关键事件的时间。条形码读取器的速度将比任何人都快。

答案 1 :(得分:0)

这就是我最终要做的...我注意到条形码扫描仪的第一个条目始终是KEYCODE_LEFT_SHIFT的KeyCode。...

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);
                    }
                }

            }