android - 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,而软键盘没有。现在的问题是我有一个支持硬蓝牙键盘、软键盘(如果他们不使用硬键盘)以及条形码扫描仪的活动。
有什么方法可以区分 dispatchKeyEvent 上的 2 个硬件设备吗?
解决方案
这就是我最终做的事情......我注意到条形码扫描仪的第一个条目始终是 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);
}
}
}