最近做了关于在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 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 来接收处理过的数据。大概就这样吧!

更多相关文章

  1. 【Android】requestDisallowInterceptTouchEvent
  2. android DownloadManager广播事件:下载完成、通知栏点击事件
  3. Android事件分发机制-自己理解以后的阐述
  4. Android监听器实现(一)Broadcast方式监听系统事件
  5. Android新建项目与简易Button事件
  6. [置顶] 整个网络可能最完善的 Android(安卓)自定义键盘 问题汇总
  7. Android的事件处理机制之基于监听的事件处理
  8. Android(安卓)MVC 架构详解
  9. Android电话系统

随机推荐

  1. Android的第二次接触
  2. Android-BLE 1. 基本类的介绍
  3. Android面试题(28)-android的view加载和绘
  4. Android并发编程1-----多线程
  5. Android自定义view之EditText中显示提示
  6. Android手机GPU真弱
  7. Android(安卓)4.x手机进入安全模式的两种
  8. Android(安卓)OpenGL ES 2.0(三)---片元着
  9. tablelayout布局内容居中的问题
  10. android之AIDL跨进程通信详解