最近做了关于在Android设备上外接扫码的项目,在此记录一下关于Android USB扫码枪获取内容的问题
首先我这边使用是USB HID的扫码枪,即插即用,只需要在界面上有一个带有焦点的EditText ,就可以获取扫码枪扫描的内容。
是不是感觉很简单,但是今天我这里是讲的是在没有EditText 的情况下获取扫码枪扫描的内容。
USB HID扫码枪会将扫描出来的内容转化为键盘事件,对应的就是Android中的KeyEvent事件,所以我们只需要在我们的activity中
重写onKeyDown方法
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- checkLetterStatus(event);
- keyCodeToNum(keyCode);
- if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
- Log.e("键盘事件", buffer.toString());
- buffer.delete(0, buffer.length());
- return true;
- }
-
- return false;
- }
上面我们说了扫码枪是响应我们的键盘事件,所以当扫码枪每扫描到一个字符的时候,就相当于按下了我们键盘上的对应按键,也就是keyCode,因此我们只需要处理这个keyCode就行了。
下面我把checkLetterStatus()检查是否大小写的方法跟keyCodeToNum()根据对应的keycode转换对应的数字跟字母
- //检查shift键
- private void checkLetterStatus(KeyEvent event) {
- int keyCode = event.getKeyCode();
- if (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT || keyCode == KeyEvent.KEYCODE_SHIFT_LEFT) {
- if (event.getAction() == KeyEvent.ACTION_DOWN) {
- //按着shift键,表示大写
- mCaps = true;
- } else {
- //松开shift键,表示小写
- mCaps = false;
- }
- }
- }
- //根据keycode得到对应的字母和数字
- private void keyCodeToNum(int keycode) {
- if (keycode >= KeyEvent.KEYCODE_A && keycode <= KeyEvent.KEYCODE_Z) {
- if (mCaps) {
- buffer.append(map.get(keycode).toUpperCase());
- } else {
- buffer.append(map.get(keycode));
- }
-
- } else if ((keycode >= KeyEvent.KEYCODE_0 && keycode <= KeyEvent.KEYCODE_9)) {
- buffer.append(keycode - KeyEvent.KEYCODE_0);
- } else {
- //暂不处理特殊符号
- }
-
- }
上面的方法里面有个map,是用来存储字母的
- Map<Integer, String> map = new HashMap<>();
- map.put(29, "a");
- map.put(30, "b");
- map.put(31, "c");
- map.put(32, "d");
- map.put(33, "e");
- map.put(34, "f");
- map.put(35, "g");
- map.put(36, "h");
- map.put(37, "i");
- map.put(38, "g");
- map.put(39, "k");
- map.put(40, "l");
- map.put(41, "m");
- map.put(42, "n");
- map.put(43, "0");
- map.put(44, "p");
- map.put(45, "q");
- map.put(46, "r");
- map.put(47, "s");
- map.put(48, "t");
- map.put(49, "u");
- map.put(50, "v");
- map.put(51, "w");
- map.put(52, "x");
- map.put(53, "y");
- map.put(54, "z");
最后用一个StringBuffer 来接收处理过的数据。大概就这样吧!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。