本文介绍如何从Android端获取扫码枪的二维码数据,扫码枪应用场景多,特别是在终端设备上,如:扫码付款,扫码取票,扫码开门等,一般实时监听扫码。扫码枪的相关设置这里不多说,都有对应的文档说明,不同扫码枪大同小异。

Android端获取扫码枪数据一般有如下三种获取方式:

  1. USB键盘模式,自感模式(出厂默认):大多数扫码枪是模拟键盘进行输入(不支持包含有汉字的二维码),大多数时候需要使用带焦点的 EditText 接收其扫描的信息。设置一个带焦点的EditText进行接收,此方式容易漏读扩展的ASCII码数据,除非二维码是标准的ASCII码(1-128),此外使用EditText不方便且焦点控制不好导致扫码不到数据。由于扫码枪会将扫描出来的内容转化为键盘事件,对应的就是Android中的KeyEvent事件,所以我们只需要在我们的activity中重写dispatchKeyEvent方法,即可获取相应事件。

  2. 通过 USB COM连接扫码:发送扫码开关指令进行扫码,即基于Usb相关类控制扫码开关,控制不好容易出问题
    特别地:使用此模式前提是先对扫码枪配置USB COM模式,再配置指令触发

  3. USB串口自感模式:即串口连接(当扫码枪使用 USB 通讯接口,但主机应用程序是采用串口通讯方式接收数据),客户端只负责监听读取数据,无须控制扫码枪指令,需要依赖usb串口传输数据的第三方库:https://github.com/mik3y/usb-serial-for-android
    特别地:使用此模式前提是先对扫码枪配置USB 虚拟串口通讯方式

注意:上面三种方式均需要进行配置好模式,再操作,建议使用方式1和3.
此外,扫码枪usb插拔时,会造成Activity重新加载,说明对Activity生命周期有影响,需要处理一下。
可在Activity配置:

android:configChanges="orientation|keyboard|keyboardHidden"

USB键盘模式使用

*** usb键盘模式扫码示例,无需EditText接收,推荐* @author song*/
public class ScannerUsbKeyboardActivity extends AppCompatActivity {UsbKeyboardAutoScan usbKeyboardAutoScan;EditText et_barcode;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.scanner_usb_keyboard_activity);et_barcode = findViewById(R.id.et_barcode);usbKeyboardAutoScan = new UsbKeyboardAutoScan();usbKeyboardAutoScan.setOnScanListener(new OnScanListener() {@Overridepublic void onScanSuccess(String barcode) {//扫码接收et_barcode.setText(barcode);}});}@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {if (usbKeyboardAutoScan.isIntercept()&& event.getKeyCode() != KeyEvent.KEYCODE_BACK) {//不处理返回键usbKeyboardAutoScan.analysisKeyEvent(event);return true;//防止输入框接收事件}return super.dispatchKeyEvent(event);}@Overrideprotected void onDestroy() {super.onDestroy();usbKeyboardAutoScan.cancel();}
}

USB串口自感模式使用

package com.sjl.test;import android.hardware.usb.UsbDevice;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;import com.sjl.scanner.BaseUsbScan;
import com.sjl.scanner.UsbComAutoScan;
import com.sjl.scanner.UsbConfig;
import com.sjl.scanner.listener.OnScanListener;import java.util.List;/*** 基于usb扫码** @author song*/
public class ScannerUsbActivity extends AppCompatActivity {BaseUsbScan usbScan;EditText et_barcode;UsbConfig usbConfig = new UsbConfig();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.scanner_usb_activity);et_barcode = findViewById(R.id.et_barcode);usbConfig.setProductId(1233);usbConfig.setVendorId(1234);
//        usbScan = new UsbCmdScan(this); //通过usb连接扫码, 发送命令扫码UsbConfig.SerialPortConfig serialPortConfig = new UsbConfig.SerialPortConfig();usbConfig.setSerialPortConfig(serialPortConfig);usbScan = new UsbComAutoScan(this);//通过usb转串口,自感模式,推荐usbScan.setOnScanListener(new OnScanListener() {@Overridepublic void onScanSuccess(String barcode) {}});}public void listUsbDevice(View view) {//找到设备插入的usb孔对应UsbDeviceList<UsbDevice> usbDevices = usbScan.getUsbDevices(this);for (UsbDevice device : usbDevices) {et_barcode.setText(et_barcode.getText() + "\n" + device.getDeviceName() + ",vendorID:" + device.getVendorId() + ",ProductId:" + device.getProductId());}}public void openUsbScan(View view) {int ret = usbScan.openScan(usbConfig);if (ret != 0) {showMsg("打开usb扫码失败,ret" + ret);} else {showMsg("打开usb扫码成功");}}private void showMsg(String s) {et_barcode.setText(s);}public void closeUsbScan(View view) {usbScan.closeScan();}public void loopScan(View view) {usbScan.startReading();}public void stopLoopScan(View view) {usbScan.stopReading();}@Overrideprotected void onDestroy() {super.onDestroy();usbScan.closeScan();}
}

项目地址

https://github.com/kellysong/scanner-master

Android扫码枪数据读取封装相关推荐

  1. android传递数据bundle封装传递map对象

    android开发默认情况下,通过Bundle bundle=new Bundle();传递值是不能直接传递map对象的,解决办法: 第一步:封装自己的map,实现序列化即可 ? 1 2 3 4 5 ...

  2. android 扫描枪封装,Android 扫码枪监听封装

    一.参考 1.常用keycode 一.简述 1.设备:扫码枪其实相当于一个物理输入设备,如果软键盘打开的话能明显感觉到其内容在输入 2.问题: 2.1.不能扫出中文来(可能和扫码枪设备,配置有关系) ...

  3. 【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )

    文章目录 I . FFMPEG 获取 AVPacket 数据前置操作 II . FFMPEG 获取 AVPacket 数据流程 III . FFMPEG AVPacket 结构体 IV . AVPac ...

  4. python读取usb扫码枪数据_USB

    Android使用AccessibilityService实现USB扫码枪数据抓取 android单屏机,通过扫码枪扫描二维码的场景非常多,扫码枪的种类也有蓝牙.USB.串口等等 目前USB的扫码枪主 ...

  5. 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 关键帧数据格式 | 非关键帧数据格式 | x264 编码后的数据处理 | 封装 H.264 视频数据帧 )

    文章目录 安卓直播推流专栏博客总结 一. x264 编码后的 H.264 数据帧 二. RTMP 协议中 关键帧 / 非关键帧 数据格式 说明 三. 判定 H.264 帧数据分隔符 四. 初始化 RT ...

  6. 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )

    文章目录 一. 基本封装数据格式说明 二. 封装 SPS PPS 数据总体说明 三. 封装头数据 四. 封装 SPS 数据 五. 封装 PPS 数据 六. 设置 RTMP 数据包其它参数 七. SPS ...

  7. android libbfaac.so,Android中Json数据读取与创建

    一:  Json的特性和在数据交互中的地位就不用说了,直接看案例. 首先在android studio中创建assets文件目录,用于存放Json数据文件,android studio 1.3 默认项 ...

  8. Android常用数据存储之SharedPreferences存储和读取用法分享

    一:Android常用数据存储,一共有五种方式,分别是 1.SharedPreferences储存数据, 2.文件存储 3.SQLite数据存储 4.ContentProvider储存数据 5.网络存 ...

  9. android bmob获取数据,Android基于bmob后端云实现数据读取

    最近在上手一个app作为练手,是关于失物招领的,其中要实现的一个功能是从云端读取数据展示在app的listview当中,其实这个功能挺常见的,不过这里还是拿来分享一下,主要介绍我解决的过程以及思路. ...

  10. python通达信接口_mootdx: 通达信数据读取 pytdx 的一个简便使用封装

    通达信数据读取接口 版本更新 把 pytdx 代码合并至项目里. 可转债历史数据获取识别(添加113开头). 修正转债数据无法获取问题. 修改获取股票数据接口(自动全部获取). 修改指数数据接口,市场 ...

最新文章

  1. php 爬虫去重,浅谈动态爬虫与去重(续)
  2. 更改innodb_page_size状态值
  3. 快速书写常见的 Kotlin 代码 MD
  4. Hash特征编码在推荐系统的应用
  5. 程序员必知的 Python 陷阱与缺陷列表
  6. python模块:JSON模块
  7. 【经验】GaussDB(for MySQL)性能优化 —— 日志的“快递驿站”
  8. Flask消息闪现及日志记录
  9. Android获取手机屏幕宽高
  10. 关于暂停或终止更新的相关读书笔记
  11. P3970 [TJOI2014]上升子序列
  12. 订阅发布延时_Redis实时队列和延时队列的php实现
  13. 面试时被问有没有别家offer,回答没有,面试总是挂!回答有,就说我是面试选手,欺骗公司!...
  14. 植物识别扫一扫的软件有哪些?植物识别软件推荐。
  15. springBoot整合sftp
  16. Field myFeignClient in com.zkh.controller.FeignController required a bean of type 'com.zkh.feign.MyF
  17. CSS选择器大全包含nth-child和nth-of-type的区别
  18. 在机器人面前,人类怎样做才能不悲观
  19. 第十四届蓝桥杯校内模拟赛第二期-Java个人题解(仅供参考)
  20. ThinkPad适不适合计算机专业,thinkpad适合什么人用

热门文章

  1. 前端js生成自定义内容的PDF及word文件的实现
  2. 苏宁大数据怎么运营_苏宁智慧门店是什么?智慧门店是如何运作的?
  3. python 画图十大工具_python实现画图工具
  4. Java实现图片水印
  5. vue+element实现手机号验证码注册
  6. 八爪鱼取消Ajax加载数据,谁知道八爪鱼采集器设置了循环翻页采集怎么才采集十几个数据就停下不动了...
  7. HP笔记本电脑如何设置屏幕亮度
  8. UWP 全屏与退出全屏
  9. 弗曼学习法,你在用吗?
  10. 【HAVENT原创】Spring RestTemplate 工具类