Android扫码枪数据读取封装
本文介绍如何从Android端获取扫码枪的二维码数据,扫码枪应用场景多,特别是在终端设备上,如:扫码付款,扫码取票,扫码开门等,一般实时监听扫码。扫码枪的相关设置这里不多说,都有对应的文档说明,不同扫码枪大同小异。
Android端获取扫码枪数据一般有如下三种获取方式:
USB键盘模式,自感模式(出厂默认):大多数扫码枪是模拟键盘进行输入(不支持包含有汉字的二维码),大多数时候需要使用带焦点的 EditText 接收其扫描的信息。设置一个带焦点的EditText进行接收,此方式容易漏读扩展的ASCII码数据,除非二维码是标准的ASCII码(1-128),此外使用EditText不方便且焦点控制不好导致扫码不到数据。由于扫码枪会将扫描出来的内容转化为键盘事件,对应的就是Android中的KeyEvent事件,所以我们只需要在我们的activity中重写dispatchKeyEvent方法,即可获取相应事件。
通过 USB COM连接扫码:发送扫码开关指令进行扫码,即基于Usb相关类控制扫码开关,控制不好容易出问题
特别地:使用此模式前提是先对扫码枪配置USB COM模式,再配置指令触发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扫码枪数据读取封装相关推荐
- android传递数据bundle封装传递map对象
android开发默认情况下,通过Bundle bundle=new Bundle();传递值是不能直接传递map对象的,解决办法: 第一步:封装自己的map,实现序列化即可 ? 1 2 3 4 5 ...
- android 扫描枪封装,Android 扫码枪监听封装
一.参考 1.常用keycode 一.简述 1.设备:扫码枪其实相当于一个物理输入设备,如果软键盘打开的话能明显感觉到其内容在输入 2.问题: 2.1.不能扫出中文来(可能和扫码枪设备,配置有关系) ...
- 【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
文章目录 I . FFMPEG 获取 AVPacket 数据前置操作 II . FFMPEG 获取 AVPacket 数据流程 III . FFMPEG AVPacket 结构体 IV . AVPac ...
- python读取usb扫码枪数据_USB
Android使用AccessibilityService实现USB扫码枪数据抓取 android单屏机,通过扫码枪扫描二维码的场景非常多,扫码枪的种类也有蓝牙.USB.串口等等 目前USB的扫码枪主 ...
- 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 关键帧数据格式 | 非关键帧数据格式 | x264 编码后的数据处理 | 封装 H.264 视频数据帧 )
文章目录 安卓直播推流专栏博客总结 一. x264 编码后的 H.264 数据帧 二. RTMP 协议中 关键帧 / 非关键帧 数据格式 说明 三. 判定 H.264 帧数据分隔符 四. 初始化 RT ...
- 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )
文章目录 一. 基本封装数据格式说明 二. 封装 SPS PPS 数据总体说明 三. 封装头数据 四. 封装 SPS 数据 五. 封装 PPS 数据 六. 设置 RTMP 数据包其它参数 七. SPS ...
- android libbfaac.so,Android中Json数据读取与创建
一: Json的特性和在数据交互中的地位就不用说了,直接看案例. 首先在android studio中创建assets文件目录,用于存放Json数据文件,android studio 1.3 默认项 ...
- Android常用数据存储之SharedPreferences存储和读取用法分享
一:Android常用数据存储,一共有五种方式,分别是 1.SharedPreferences储存数据, 2.文件存储 3.SQLite数据存储 4.ContentProvider储存数据 5.网络存 ...
- android bmob获取数据,Android基于bmob后端云实现数据读取
最近在上手一个app作为练手,是关于失物招领的,其中要实现的一个功能是从云端读取数据展示在app的listview当中,其实这个功能挺常见的,不过这里还是拿来分享一下,主要介绍我解决的过程以及思路. ...
- python通达信接口_mootdx: 通达信数据读取 pytdx 的一个简便使用封装
通达信数据读取接口 版本更新 把 pytdx 代码合并至项目里. 可转债历史数据获取识别(添加113开头). 修正转债数据无法获取问题. 修改获取股票数据接口(自动全部获取). 修改指数数据接口,市场 ...
最新文章
- php 爬虫去重,浅谈动态爬虫与去重(续)
- 更改innodb_page_size状态值
- 快速书写常见的 Kotlin 代码 MD
- Hash特征编码在推荐系统的应用
- 程序员必知的 Python 陷阱与缺陷列表
- python模块:JSON模块
- 【经验】GaussDB(for MySQL)性能优化 —— 日志的“快递驿站”
- Flask消息闪现及日志记录
- Android获取手机屏幕宽高
- 关于暂停或终止更新的相关读书笔记
- P3970 [TJOI2014]上升子序列
- 订阅发布延时_Redis实时队列和延时队列的php实现
- 面试时被问有没有别家offer,回答没有,面试总是挂!回答有,就说我是面试选手,欺骗公司!...
- 植物识别扫一扫的软件有哪些?植物识别软件推荐。
- springBoot整合sftp
- Field myFeignClient in com.zkh.controller.FeignController required a bean of type 'com.zkh.feign.MyF
- CSS选择器大全包含nth-child和nth-of-type的区别
- 在机器人面前,人类怎样做才能不悲观
- 第十四届蓝桥杯校内模拟赛第二期-Java个人题解(仅供参考)
- ThinkPad适不适合计算机专业,thinkpad适合什么人用