Android实现USB扫码枪获取扫描内容
作者:骑马打酱油 发布时间:2023-09-08 00:56:31
标签:Android,扫码枪,扫描
最近做了关于在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 来接收处理过的数据。大概就这样吧!
来源:https://blog.csdn.net/u011811983/article/details/82285507


猜你喜欢
- 概念所谓回文串,就是字符串反转以后和原串相同,如 abba 和 lippil。对于回文串还是比较容易去验证的,从字符数组的两端开始向中间靠拢
- 作为一个WPF控件开发者,我在工作中经常遇到如本文标题所示的问题。其实,这个问题并不是很难,只是在操作上有些繁琐。本文将尝试对这个问题进行解
- 1. 运算符是什么?1.1 定义:对常量和变量进行运算操作的符号程序对数据进行运算时要用运算符1.2 常见运算符的概述1.3 表达式1.3.
- 以前一直看见 i18N ,现在才知道原来 i18N 就是 Internationalization,因为以 i 开头,以 N 结尾,共18个
- WPF实现滚动条还是比较方便的,只要在控件外围加上ScrollViewer即可,但美中不足的是:滚动的时候没有动画效果。在滚动的时候添加过渡
- java 回调函数例子,及其原理,与代理模式的区别回调函数应用程序(application program)会时常通过API调用库里所预先备
- 稀疏数组:当一个二维数组中大部份的值为0,或者为同一值的时候,可以用稀疏数组来保存实现思路:记录二维数组有多少行多少列、多少个不同的值把不同
- 1、什么是hashCodehashCode就是对象的散列码,是根据对象的某些信息推导出的一个整数值,默认情况下表示是对象的存储地址。通过散列
- 发现问题最近在项目中刚刚修改一个功能,代码正准备验证,启动Idea的debug模式,运行项目,发现启动失败,查看日志发现定时任务被重复执行,
- //构造文件File类File f=new File(fileName);//判断是否为目录f.isDirectory();//获取目录下的
- 目录Spring事件驱动源码实战在项目实际开发过程中,我们有很多这样的业务场景:一个事务中处理完一个业务逻辑后需要跟着处理另外一个业务逻辑,
- 本文实例讲述了Android编程实现类似天气预报图文字幕垂直滚动效果的方法。分享给大家供大家参考,具体如下:在很多天气或者新闻的应用中,我们
- 前言PowerManagerService之亮屏流程分析 分析了亮屏的流程,并归纳出了一个适用于亮屏或灭屏的通用的流程。 但是,灭屏流程还有
- 前言本章是关于Java数组的最全汇总,本篇为汇总上篇,主要讲了一维数组的相关内容。数组是最常见的一种数据结构,它是相同类型的用一个标识符封装
- 简介:本篇博客主要包括recyclerview添加多种布局以及添加头布局和尾布局,还有item点击事件思路:主要重写Recyclerview
- 在开发过程中,我们可能会经常遇到这样的需求样式:这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三
- 最近项目中需要实现定时执行任务,比如定时计算会员的积分、调用第三方接口等,由于项目采用spring框架,所以这里结合spring框架来介绍。
- 本文实例讲述了用WebBrowser操作frame和iframe的方法,比较适合C#初学者参考学习。示例浅显易懂,具体方法如下:
- 本文实例讲述了Android编程之蓝牙测试。分享给大家供大家参考。具体分析如下:一、软件平台:win7 + eclipse + sdk二、设
- 自动注入和@Autowire@Autowire不属于自动注入!注入方式(重要)在Spring官网上(文档),定义了在Spring中的注入方式