近期有个需求,安卓设备外接扫码枪,系统读取扫码枪扫描的内容。

网上查了一些例子,拿过来用的时候都不太好使,最后没办法,自己实现了一个(目前只支持英文字母和英文符号)。

代码如下:

1. 重写Activity的onKeyDown方法,收集扫码枪返回的keycode。

ArrayList<Integer> scannedCodes = new ArrayList<Integer>();@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode!= KeyEvent.KEYCODE_ENTER){ //扫码枪以回车为结束scannedCodes.add(keyCode);}else{ //结束handleKeyCodes();}return super.onKeyDown(keyCode, event);
}

2. 处理接收倒的keycode,handleKeyCodes()方法。

private void handleKeyCodes(){FnString fnString = new FnString();String result = "";boolean hasShift = false;for(int keyCode : scannedCodes){result += fnString.keyCodeToChar(keyCode, hasShift);hasShift = (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT);  }Toast.makeText(context, result, Toast.LENGTH_LONG).show();scannedCodes.clear();
}

3. keycode转换为字符的方法

/** keyCode转换为字符 */
public String keyCodeToChar(int code, boolean isShift){switch(code){case KeyEvent.KEYCODE_SHIFT_LEFT: return "";//数字键10个 + 符号10个case KeyEvent.KEYCODE_0: return isShift ? ")" : "0";case KeyEvent.KEYCODE_1: return isShift ? "!" : "1";case KeyEvent.KEYCODE_2: return isShift ? "@" : "2";case KeyEvent.KEYCODE_3: return isShift ? "#" : "3";case KeyEvent.KEYCODE_4: return isShift ? "$" : "4";case KeyEvent.KEYCODE_5: return isShift ? "%" : "5";case KeyEvent.KEYCODE_6: return isShift ? "^" : "6";case KeyEvent.KEYCODE_7: return isShift ? "&" : "7";case KeyEvent.KEYCODE_8: return isShift ? "*" : "8";case KeyEvent.KEYCODE_9: return isShift ? "(" : "9";//字母键26个小写 + 26个大写case KeyEvent.KEYCODE_A: return isShift ? "A" : "a";case KeyEvent.KEYCODE_B: return isShift ? "B" : "b";case KeyEvent.KEYCODE_C: return isShift ? "C" : "c";case KeyEvent.KEYCODE_D: return isShift ? "D" : "d";case KeyEvent.KEYCODE_E: return isShift ? "E" : "e";case KeyEvent.KEYCODE_F: return isShift ? "F" : "f";case KeyEvent.KEYCODE_G: return isShift ? "G" : "g";case KeyEvent.KEYCODE_H: return isShift ? "H" : "h";case KeyEvent.KEYCODE_I: return isShift ? "I" : "i";case KeyEvent.KEYCODE_J: return isShift ? "J" : "j";case KeyEvent.KEYCODE_K: return isShift ? "K" : "k";case KeyEvent.KEYCODE_L: return isShift ? "L" : "l";case KeyEvent.KEYCODE_M: return isShift ? "M" : "m";case KeyEvent.KEYCODE_N: return isShift ? "N" : "n";case KeyEvent.KEYCODE_O: return isShift ? "O" : "o";case KeyEvent.KEYCODE_P: return isShift ? "P" : "p";case KeyEvent.KEYCODE_Q: return isShift ? "Q" : "q";case KeyEvent.KEYCODE_R: return isShift ? "R" : "r";case KeyEvent.KEYCODE_S: return isShift ? "S" : "s";case KeyEvent.KEYCODE_T: return isShift ? "T" : "t";case KeyEvent.KEYCODE_U: return isShift ? "U" : "u";case KeyEvent.KEYCODE_V: return isShift ? "V" : "v";case KeyEvent.KEYCODE_W: return isShift ? "W" : "w";case KeyEvent.KEYCODE_X: return isShift ? "X" : "x";case KeyEvent.KEYCODE_Y: return isShift ? "Y" : "y";case KeyEvent.KEYCODE_Z: return isShift ? "Z" : "z";//符号键11个 + 11个case KeyEvent.KEYCODE_COMMA: return isShift ? "<" : ",";case KeyEvent.KEYCODE_PERIOD: return isShift ? ">" : ".";case KeyEvent.KEYCODE_SLASH: return isShift ? "?" : "/";case KeyEvent.KEYCODE_BACKSLASH: return isShift ? "|" : "\\";case KeyEvent.KEYCODE_APOSTROPHE: return isShift ? "\"" : "'";case KeyEvent.KEYCODE_SEMICOLON: return isShift ? ":" : ";";case KeyEvent.KEYCODE_LEFT_BRACKET: return isShift ? "{" : "[";case KeyEvent.KEYCODE_RIGHT_BRACKET: return isShift ? "}" : "]";case KeyEvent.KEYCODE_GRAVE: return isShift ? "~" : "`";case KeyEvent.KEYCODE_EQUALS: return isShift ? "+" : "=";case KeyEvent.KEYCODE_MINUS: return isShift ? "_" : "-";default: return "?";}
}

效果1:

效果2:

Android 读取扫码枪内容(条形码)相关推荐

  1. Android 读取扫码枪的内容,可以读取条形码 ,二维码

    很多文章都说 码枪其实相当于一个物理输入设备 ,获取呢,其实代码并不多,下面来实现下效果 ,这里已经用在了项目 效果还非常不错, 方法 1 public class MainActivity exte ...

  2. android 读取文件内容,Android读写文件 获取文件并读取写入数据

    一.       从 resource 中的 raw 文件夹中获取文件并读取数据(资源文件只能读不能写) String res = ""; try{ InputStream in ...

  3. Android 读取文件内容

    如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法. FileInputStr ...

  4. androidの读取短信内容

    androidの读取短信内容 1. 读取短信内容,很简单,直接上代码 <span style="font-size:14px;"> public Uri SMS_INB ...

  5. Android 读取本地txt文件中的内容

    Android 读取本地txt文件中的内容 import java.io.BufferedReader; import java.io.File; import java.io.FileInputSt ...

  6. Android USB 扫码枪获取扫描内容

    最近做了关于在Android设备上外接扫码的项目,在此记录一下关于Android USB扫码枪获取内容的问题 首先我这边使用是USB HID的扫码枪,即插即用,只需要在界面上有一个带有焦点的EditT ...

  7. Android读取assets目录下文件数据内容

    Android读取assets目录下文件数据内容 Android的体系架构设计中,assets目录下的数据内容(图片.文件等等)将不会被Android系统压缩.二次处理等,assets目录下的文件 ...

  8. windows读取android手机内容,Win10 PC到Android手机共享内容的技巧

    最近推出的Your Phone应用程序在很短的时间内在Windows 10用户中获得了极大的欢迎.用户可以直接使用他们的桌面访问存储在手机内存中的消息和照片.好消息是,您现在可以将Windows 10 ...

  9. Android读取/dev/graphics/fb0 屏幕截图

    Android屏幕截图有很多方式这里只使用其中一种截图 主要是读取/dev/graphics/fb0,进行转换,复杂点就在如何把读取的数据进行转换. 可以参考一下这篇文章:http://blog.ch ...

最新文章

  1. 引入外部化的配置文件
  2. 中关村-DIY操作系统之不分区安装Ubuntu系统
  3. [机器学习] gcForest 官方代码详解
  4. JS DOM事件(常用消息、常用事件、addEventListener、removeEventListener)
  5. 使用Kubeadm搭建Kubernetes(1.12.2)集群
  6. [安卓] 2、使用2中方法做按钮监听和图片按钮使用
  7. android studio左边选择渠道,AndroidStudio简单使用(二):左侧Structure
  8. Timeline使用手册
  9. ARC098E Range Minimum Queries
  10. RuntimeError: The Session graph is empty. Add operations to the graph before calling run().
  11. MFC程序设计——标尺的例子
  12. ADS2017破解后重启显示license失效,需要把EESoft Flexnet Licence Server启动类型设置为自动
  13. Matlab常用的滤波函数集合(会陆续更新详解)
  14. Paypal无限转圈
  15. 到底买苹果XS还是XR_iPhone XS 和 XR 买哪个?10 个理由告诉你 XS 更好,贵是有原因的...
  16. 两步彻底关闭Windows默认共享文件夹(含IPC$)
  17. 如何把PDF转Word?建议收藏这些方法
  18. java毕业设计基于的测试项目管理平台Mybatis+系统+数据库+调试部署
  19. JavaScript调用原生API获取手机型号
  20. 电脑收不到UDP广播

热门文章

  1. 【UI自动化】微信群聊未添加人数统计
  2. gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器
  3. 电子商务网站商品推荐案例分析
  4. 2020最新软件著作权申请流程(阿里云代理)
  5. STM32实现USB摄像头显示到LCD屏幕上
  6. 准确记录用户观看视频内容时长
  7. 设计没素材没灵感,这些网站可以帮你快速找到你需要的照片
  8. mindjet mindManager 添加图像标签
  9. Python AI:如何构建神经网络并进行预测
  10. 广州计算机操作员培训,计算机操作员中级培训内容