Android实现USB扫码枪获取扫描内容
这篇文章主要为大家详细介绍了Android实现USB扫码枪获取扫描内容,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
最近做了关于在Android设备上外接扫码的项目,在此记录一下关于Android USB扫码枪获取内容的问题
首先我这边使用是USB HID的扫码枪,即插即用,只需要在界面上有一个带有焦点的EditText ,就可以获取扫码枪扫描的内容。
是不是感觉很简单,但是今天我这里是讲的是在没有EditText 的情况下获取扫码枪扫描的内容。
USB HID扫码枪会将扫描出来的内容转化为键盘事件,对应的就是Android中的KeyEvent事件,所以我们只需要在我们的activity中
重写onKeyDown方法
1 2 3 4 5 6 7 8 9 10 11 12 | @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转换对应的数字跟字母
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | //检查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,是用来存储字母的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 来接收处理过的数据。大概就这样吧!
以上就是本文的全部内容,希望对大家的学习有所帮助
原文链接:https://blog.csdn.net/u011811983/article/details/82285507