Android实现USB扫码枪获取扫描内容

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android接入USB扫码模块的方法

    前言 USB扫码模块可以是扫描盒子或者扫码枪之类的,一根USB线作为供电和数据通信使用,有些扫码模块支持虚拟串口模式,虚拟串口模式读取数据会比较简单一点,和普通的串口一样操作即可,就是通过虚拟串口口+波特率即可获取到数据,这里主要讲读取USB模式下的数据. 1.读取USB模式下的数据 USB模式下的扫码模块相当于一个外接键盘,也就是它必须在有光标的地方才能进行扫码,且是直接把扫到的内容自动输入到输入框中,并不受我们的控制,所以我们必须另外想办法,安卓系统中有这么个方dispatchKeyEven

  • Android手机(设备)连接扫描枪扫码遇到的问题

    以下内容以我发布前的时间为准,可能之后厂商给设备改进后都没有这些问题. 1.android手机连接扫描枪有些手机显示不了系统键盘 2.连接扫描枪使用的是百度输入法,条码是字母数字组合的扫码会出现乱码(如条码:A0011305150081:小米没有键盘的扫描出现:a0011305150081,啊1305150081,等:华为有键盘的出现:a0011305150081,0011305150081):如下图: 3.连接扫描枪不使用百度输入法,小米手机使用搜狗输入法扫码:A0011305150081,出

  • 超简单Android集成华为HMS Scankit 扫码SDK实现扫一扫二维码

    前言 最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗的时候,成功率也比较低,集成好给我们老大看了下,感觉不是很满意.最近偶尔看到了华为一个发布会里面有介绍扫码功能,稍微研究了下,居然是一款免费扫码神器,官方称之为Scan Kit,号称还同时支持Android和iOS,半信半疑上手搞了一把发现效果还真不错!测了下发现对于一些有反光,污损,形变,超远距离的场

  • Android实现扫码功能

    本文实例为大家分享了Android实现扫码功能的具体代码,供大家参考,具体内容如下 1.引入 implementation 'com.journeyapps:zxing-android-embedded:3.5.0' 2.使用: public void initScan() { IntentIntegrator integrator = new IntentIntegrator(this); // 设置要扫描的条码类型,ONE_D_CODE_TYPES:一维码,QR_CODE_TYPES-二维码

  • Android sdutio配置Zxing进行扫码功能的实现方法

    github开源项目(Zxing)demo 最快的调用Zxing方法 1.关联第三方库 2.调用基础的扫码 3.获取返回值 具体代码如下: //1.默认选项启动意图 new IntentIntegrator(MainActivity.this).initiateScan(); // `this` is the current Activity //2.获取得到的结果: @Override protected void onActivityResult(int requestCode, int r

  • android读取扫码模组数据的方法

    本文实例为大家分享了android读取扫码模组数据的具体代码,供大家参考,具体内容如下 android读取扫码模组数据 **在dispatchKeyEvent方法中承接读取的数据** 在dispatchKeyEvent方法中承接读取的数据 private StringBuilder mScanCodeBuilder = new StringBuilder(); @Override public boolean dispatchKeyEvent(@NonNull KeyEvent event) {

  • Android 超简易Zxing框架 生成二维码+扫码功能

    zxing是一个二维码的框架. 配置 1. implementation 'com.journeyapps:zxing-android-embedded:4.1.0' 如果报错在这个文件的android下加上如下配置,让其支持Java1.8,不然只有1.7.1.6 (可在'app'右键---->open module settings------>Module看到) compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 tar

  • Android二维码的生成与扫码-zxing示例代码

    由于GitHub上面的zxing功能太多,有的用不到,我就抽取了重要的出来使用,这个可以生成二维码,扫描二维码和相册中的二维码 Demo效果: 1.在project的build.gradle添加如下代码: allprojects { repositories { maven { url 'https://jitpack.io' } } } 2.在build.gradle添加依赖: dependencies { compile 'com.github.goodboy321:Scan-Zxing:1

  • Android 扫码枪不使用输入框获取扫描值的操作方法

    dispatchKeyEvent获取扫描结果 这是在CSDN上看到的评论,打印出来的并没有有关扫描的信息,我把打印的日志放在了最外层,发现其中一条是有关扫描的条码 event Action:ACTION_MULTIPLE,keyCode:KEYCODE_UNKNOWN dispatchKeyEvent: KeyEvent { action=ACTION_MULTIPLE, keyCode=KEYCODE_UNKNOWN, scanCode=0, characters="3433422404403

  • Android集成zxing扫码框架功能

    我们知道zxing是一个强大的处理二维码和条形码等的开源库,本篇文章记录一下自己在项目中集成zxing开源库的过程. 导入依赖 implementation 'com.google.zxing:core:3.3.3' 申请权限 在AndroidManifest中申请相应权限: <!--相机--> <uses-permission android:name="android.permission.CAMERA" /> <!--震动--> <use

随机推荐