Files
pad_scanner/docs/Android扫描接口文档.md
Misaka 8fa02424a5 Add D500 scanner SDK documentation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-06 21:47:04 +08:00

22 KiB
Raw Permalink Blame History

Android 扫描接口说明

江苏东大集成电路系统工程技术有限公司 www.seuic.com

![SEUIC 东集 Logo 图片占位符]

![世界地图装饰图片占位符]

修订记录

版本号 修订日期 修订内容 修订人员
1.0 2017/03/16 建立本文档 罗涛
1.1 2017/5/31 加入回调函数注意事项说明 罗涛
1.2 2017/11/13 修正关于图像读取接口的描述 罗涛
1.3 2017/11/20 添加新增参数介绍 罗涛

目录

  • 概述
    • 硬件平台
    • 软件平台
    • 适用对象
  • 准备工作
    • Jar 包引用方法
    • 所需的相关权限
  • 扫描相关类介绍
    • 扫描工厂类
    • 扫描类
    • 扫描数据回调接口类
    • 读取图像回调接口类
    • 扫描状态回调接口类
    • 扫描数据类
    • 扫描按键监听类
  • 扫描接口介绍
    • 获取扫描头上下文
    • 打开扫描头
    • 关闭扫描头
    • 开始扫描
    • 停止扫描
    • 设置扫描条码回调
    • 启用扫描头
    • 禁用扫描头
    • 获取条码参数
    • 设置条码参数
    • 获取扫描成功后图像
    • 开始读取图像
    • 停止读取图像
    • 设置读取图像回调
    • 设置扫描头状态回调
  • 扫描参数介绍
    • 条码设置参数
    • 扫描状态参数

概述

我司提供的所有设备上已经内置了扫描服务及应用,方便客户定制扫描服务,但是由于有部分客户需要自己开发基于我司扫描 SDK 的应用,故本文档致力于介绍有关扫描 SDK 的相关内容,以便帮助用户更为灵活地使用我们的设备。

硬件平台

SDK 适用于我司所有终端设备,具体使用范围在函数接口说明中指明,若无指明表示都支持。

软件平台

SDK 基于 Android 4.3、Android 4.4、Android 5.1 版本,支持 Eclipse、Android Studio 开发工具。

适用对象

希望在自己的应用中定制扫描的开发人员。


准备工作

Jar 包引用方法

1、首先以 Eclipse 为例,右击项目 → Properties → Java Build Path → Libraries → Add External JARs选择 ScannerAPI.jar 文件。

![Eclipse 添加外部 JAR 包截图占位符]

2、以 Android Studio Version2.2.2 版本为例,在 project 中,在 app 目录下新建一个 libsref 目录,将 ScannerAPI 放入该目录下,并右击工程选择 Open Module Settings 选中相应的 Module切换至最右方的 Dependencies点击右方加号选择 File dependency 添加 ScannerAPI.jar,并且修改 scope 为 provided,声明该 ScannerAPI.jar 只在编译时需要依赖,在运行时不需要。

① 将 ScannerAPI.jar 放入 app/libsref/

![Android Studio 项目结构 libsref 目录截图占位符]

② 右击工程选择 Open Module Settings 选中相应的 Module切换至最后方的 Dependencies点击右方加号选择 File dependency 添加 ScannerAPI.jar

![Android Studio Open Module Settings 菜单截图占位符]

![Android Studio Dependencies 添加 jar 包截图占位符]

③ 更改 compile 为 provided声明该 ScannerAPI.jar 只在编译时需要依赖,在运行时不需要,最后保存设置即可。

![Android Studio scope 设置为 Provided 截图占位符]

④ 如果设置成功,会在相应的 build.gradle 中有如下 dependencies

dependencies {
    provided files('libsref/ScannerAPI.jar')
}

所需的相关权限

在进行基于我们的扫描 SDK 开发的时候,需在 AndroidManifest.xml 的 application 节点下添加以下代码:

<uses-library android:name="android.scanner.library"/>

D500/D510/D330S 设备中二维扫描需添加以下权限:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

注意点:

  1. 在一个应用中只需要打开一次扫描头即可,不需要打开多次,否则会耗时太大,产生卡屏现象。
  2. 退出程序的时候可以选择关闭扫描头,其余场合不可关闭。
  3. 可以参照测试 demo 中的方式,在 ScannerService 中定义 action在使用扫描的 UI 中直接使用动态注册广播接收器接收到扫描解析的结果。

扫描相关类介绍

扫描工厂类

项目 内容
包名 com.seuic.scanner
类名 ScannerFactory
说明 扫描工厂类,主要用于获取扫描头资源

扫描类

项目 内容
包名 com.seuic.scanner
类名 Scanner
说明 扫描主要实现类,定义了一系列扫描操作方法

扫描数据回调接口类

项目 内容
包名 com.seuic.scanner
类名 DecodeInfoCallBack
回调函数 onDecodeComplete(DecodeInfo barcodeInfo)
回调函数参数 param1: 条码信息,DecodeInfo
回调函数返回值 void
说明 扫描回调函数,用户需引用该接口,并调用 Scanner 类中 setDecodeInfoCallBack 后可获得条码信息。

注意: 该回调方法中请勿进行 UI 操作!

读取图像回调接口类

项目 内容
包名 com.seuic.scanner
类名 VideoCallBack
回调函数 onVideoCallBack(int width, int height, byte[] img)
回调函数参数 param1: 返回图像宽度
param2: 返回图像高度
param3: 返回的图像数据Bitmap 格式)
回调函数返回值 true:操作成功,停止出光并终止对图像的读取
false:操作失败,继续读取图像
说明 扫描回调函数,用户需引用该接口,并调用 Scanner 类中的 setVideoCallBack 后可获得图像数据,同时每取得一帧图像都会调用该函数,第三方的相关操作在此处处理。

注意: 该回调方法中请勿进行 UI 操作!

扫描状态回调接口类

项目 内容
包名 com.seuic.scanner
类名 StatusCallBack
回调函数 onStatusCallBack(int status, int info)
回调函数参数 param1: 状态信息
 0扫描成功
 1扫描超时
 2扫描被取消
 3扫描出现错误暂未使用
 4其他事件暂未使用
param2: 其他额外信息(暂未使用)
扫描状态参数参见:扫描状态参数
回调函数返回值 void
说明 状态回调函数,用户可引用该接口,并且调用 Scanner 类中的 setStatusCallBack 后可以当扫描头状态更新时获得当前扫描状态。

注意: 该回调方法中请勿进行 UI 操作!

扫描数据类

项目 内容
包名 com.seuic.scanner
类名 DecodeInfo
类成员 String barcode:条码数据
String codetype:条码类型
int length:条码长度

扫描按键监听类

项目 内容
包名 com.seuic.scanner
类名 ScannerKey
类成员变量 KEY_DOWN:扫描按键按下
KEY_UP:扫描按键抬起
类方法 int open():打开扫描键监听,返回 1打开成功-1打开失败
int getKeyEvent()获取按键事件返回1扫描键按下0扫描键抬起-1获取失败。注意该方法将阻塞进程推荐异步调用。
void close():关闭扫描键监听
说明 扫描按键监听类

示例代码:

import com.seuic.scanner.Scanner;
import com.seuic.scanner.ScannerKey;
import com.seuic.scanner.ScannerFactory;

public class ScannerApiTest {
    // ……
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int ret1 = ScannerKey.open();
            if (ret1 > -1) {
                while (true) {
                    int ret = ScannerKey.getKeyEvent();
                    if (ret > -1) {
                        switch (ret) {
                            case ScannerKey.KEY_DOWN:
                                scanner.startScan();
                                break;
                            case ScannerKey.KEY_UP:
                                scanner.stopScan();
                                break;
                        }
                    }
                }
            }
        }
    };
    // ……
    ScannerKey.close();
}

扫描接口介绍

接口具体使用范围若无指明表示所有扫描头都支持。

获取扫描头上下文

项目 内容
引用包名 com.seuic.scanner
引用类 ScannerFactory
接口 getScanner
接口参数 Context context
返回值 Scanner 实例
说明 获取扫描类实例

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;

public class ScannerApiTest {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    // ……
}

打开扫描头

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 open
接口参数 void
接口返回值 boolean
说明 返回 true,打开扫描头成功;返回 false,打开扫描头失败。注意:仅在该方法返回为 true 时,才可进行扫描头其他操作。

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;

public class ScannerApiTest {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    Boolean status = scanner.open();
    // ……
}

关闭扫描头

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 close
接口参数 void
接口返回值 void
说明 释放扫描头资源

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;

public class ScannerApiTest {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    Boolean status = scanner.close();
    // ……
}

开始扫描

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 startScan
接口参数 void
接口返回值 void
说明 开始扫描:扫描头出光进入条码读取模式

停止扫描

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 stopScan
接口参数 void
接口返回值 void
说明 停止扫描,可使扫描头灭光并终止条码读取

设置扫描条码回调

项目 内容
引用包名 com.seuic.scanner
引用类名 ScannerDecodeInfoCallBackDecodeInfo
接口名称 setDecodeInfoCallBack
接口参数 param1DecodeInfoCallBack
接口返回值 void
说明 设置用户扫描结束后的回调函数,该函数是获取包括条码数据、长度、类型的信息。在设置之前确保实现了 DecodeInfoCallBack 中的 onDecodeComplete 方法。

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
import com.seuic.scanner.DecodeInfoCallBack;
import com.seuic.scanner.DecodeInfo;

public class ScannerApiTest implements DecodeInfoCallBack {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    scanner.setDecodeInfoCallBack(this);
    scanner.startScan();
    // …….
    scanner.stopScan();

    @Override
    public void onDecodeComplete(DecodeInfo info) {
        // ……
    }
    // ……
}

启用扫描头

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 enable
接口参数 void
接口返回值 void
说明 启用扫描头

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;

public class ScannerApiTest {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    scanner.enable();
    // ……
}

禁用扫描头

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 disable
接口参数 void
接口返回值 void
说明 禁用扫描头,该操作完成后,将无法进行扫描操作

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;

public class ScannerApiTest {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    scanner.disable();
    // ……
}

获取条码参数

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 getParams
接口参数 param1参数代码。例如获取 Scan Angle 的值,条码参数便是 0x02,具体参数代码参见:条码设置参数
接口返回值 int 类型,条码参数当前值
说明 根据参数代码获取该参数当前的设定值

设置条码参数

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 setParams
接口参数 param1参数代码。例如设置 Scan Angle 的值,条码参数便是 0x02
param2需要设置的参数值
参数代码参见:条码设置参数
接口返回值 booleantrue 设置成功,false 设置失败
说明 根据参数代码设置扫描参数值

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;

public class ScannerApiTest {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    int value = scanner.getParams(0x02);
    // ……
    scanner.setParams(0x02, 1);
}

获取扫描成功后图像

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 getLastImage
接口参数 void
接口返回值 byte[]图像数据width: 832 height: 640图像格式为 bitmap
说明 当完成一次成功的扫描后,调用该接口,获取该次用于解码的扫描图像

注意: 该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;

public class ScannerApiTest {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    scanner.startScan();
    // ……
    byte[] image = scanner.getLastImage();
}

开始读取图像

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 startVideo
接口参数 param1int 类型设置超时时间单位为ms
接口返回值 0:回调函数 onVideoCallback 返回成功自动退出无需调用 stopVideo
9:参数无效退出
17:调用 stopVideo 手动退出
6:取图像失败退出
25:超时退出
2:未知错误退出
说明 开始读取图像:扫描头开始出光并进入图像读取模式,为阻塞函数,且与 startScan 不可同时使用。

注意: 该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8

停止读取图像

项目 内容
引用包名 com.seuic.scanner
引用类 Scanner
接口名称 stopVideo
接口参数 void
接口返回值 void
说明 扫描头停止出光并终止对图像地读取。

注意: 该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8

设置读取图像回调

项目 内容
引用包名 com.seuic.scanner
引用类名 ScannerVideoCallBack
接口名称 setVideoCallBack
接口参数 param1VideoCallBack
接口返回值 void
说明 设置用户扫描进入读取图像模式后的回调函数,该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;
import com.seuic.scanner.VideoCallBack;

public class ScannerApiTest implements VideoCallBack {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    scanner.setVideoCallBack(this);
    scanner.startVideo(3000);
    // ……
    scanner.stopVideo();

    @Override
    public boolean onVideoCallBack(int width, int height, byte[] img) {
        // ……
    }
    // ……
}

设置扫描头状态回调

项目 内容
引用包名 com.seuic.scanner
引用类名 ScannerStatusCallBack
接口名称 setStatusCallBack
接口参数 param1StatusCallBack 接口类
接口返回值 void
说明 设置用户获取当前扫描状态的回调函数,在设置之前务必实现 StatusCallBack 中的 onStatusCallBack 方法,设置之后有关扫描的状态会自动回调 onStatusCallBack 将当前状态反馈给用户

示例代码:

import com.seuic.scanner.ScannerFactory;
import com.seuic.scanner.Scanner;

public class ScannerApiTest implements StatusCallBack {
    // ……
    Scanner scanner = ScannerFactory.getScanner(context);
    scanner.setStatusCallBack(this);

    @Override
    public boolean onStatusCallBack(int status, int info) {
        // ……
    }
    // ……
}

扫描参数介绍

条码设置参数

Parameter Parameter Number (Hex)
Laser On Time 0x01
Scan Angle 0x02
Time Out Between Same Symbol 0x03
Linear Code Type Security Levels 0x04
Bi-directional Redundancy 0x06
Aimer/Illumination lighting combinations 0x07
Mobile Phone/Display Mode 0x08
Illumination Power Level 0x09
Decode Time Out 0x0a
Adaptive Scanning 0x0b
Continue Scan Mode 0x0c
Exposure Mode 0x0d
Picklist Mode 0x0e
Aim Accuracy Level 0x0f
GS1 AI Separator 0x10
Transfer Aim ID 0x11
Inverse Mode 0x12
Low Power Delay Time 0x13
Hold Scanning Time Out 0x14
UPC-A 0x101
UPC-E 0x102
UPC-E1 0x103
EAN-8 0x104
EAN-13 0x105
Bookland EAN 0x106
Transmit UPC-A Check Digit 0x107
Transmit UPC-E Check Digit 0x108
Transmit UPC-E1 Check Digit 0x109
Transmit EAN-13 Check Digit 0x10a
Transmit EAN-8 Check Digit 0x10b
UPC-A Preamble 0x10c
UPC-E Preamble 0x10d
UPC-E1 Preamble 0x10e
Convert UPC-E to A 0x10f
Convert UPC-E1 to A 0x110
Convert EAN-8 to 13 0x111
UCC Coupon Extended Code 0x112
UPC-E Expand 0x113
UPC-A 2 Char Addenda 0x114
UPC-A 5 Char Addenda 0x115
UPC-E 2 Char Addenda 0x116
UPC-E 5 Char Addenda 0x117
EAN13 2 Char Addenda 0x118
EAN13 5 Char Addenda 0x119
EAN8 2 Char Addenda 0x11a
EAN8 5 Char Addenda 0x11b
Code 128 0x121
Code 128 Minimum Length 0x122
Code 128 Maximum Length 0x123
ISBT 128 0x124
GS1-128 0x125
ISBT 128 Predefined Concatenation Sequences On/Off 0x126
Code 39 0x131
Trioptic Code 39 0x132
Code 39 Full ASCII 0x133
Convert Code 39 to Code 32 0x134
Code 32 Prefix 0x135
Code 39 Minimum Length 0x136
Code 39 Maximum Length 0x137
Transmit Code 39 Check Digit 0x138
Code 39 Check Digit Verification 0x139
Transmit Code 39 Start/Stop Characters 0x13a
Code 39 Quiet Zone 0x13b
Code 93 0x141
Code 93 Minimum Length 0x142
Code 93 Maximum Length 0x143
Code 11 0x151
Code 11 Minimum Length 0x152
Code 11 Maximum Length 0x153
Code 11 Check Digit Verification 0x154
Transmit Code 11 Check Digit 0x155
Interleaved 2 of 5 0x161
Interleaved 2 of 5 Minimum Length 0x162
Interleaved 2 of 5 Maximum Length 0x163
Discrete 2 of 5 0x171
Discrete 2 of 5 Minimum Length 0x172
Discrete 2 of 5 Maximum Length 0x173
Chinese 2 of 5 0x181
Chinese 2 of 5 Minimum Length 0x182
Chinese 2 of 5 Maximum Length 0x183
Codabar 0x191
Codabar Minimum Length 0x192
Codabar Maximum Length 0x193
Transmit Codabar Start/Stop Characters 0x194
MSI 0x201
MSI Minimum Length 0x202
MSI Maximum Length 0x203
RSS 14 0x211
RSS limit 0x212
RSS expanded 0x213
Convert RSS to UPC/EAN 0x214
QR Code 0x221
QR Code Minimum Length 0x222
QR Code Maximum Length 0x223
QR Inverse 0x224
MicroQR 0x225
Data Matrix 0x231
Data Matrix Minimum Length 0x232
Data Matrix Maximum Length 0x233
Data Matrix Inverse 0x234
Data Matrix Decode Mirror Images 0x235
China Post 0x241
China Post Minimum Length 0x242
China Post Maximum Length 0x243
Matrix 2 of 5 0x251
Matrix 2 of 5 Minimum Length 0x252
Matrix 2 of 5 Maximum Length 0x253
US Postnet 0x261
US Planet 0x262
British Post 0x263
Japanese Post 0x264
Australian Post 0x265
UPU FICS Postal 0x266
USPS 4CB/One Code/Intelligent Mail 0x267
KIX(Netherlands) Post 0x268
Transmit US Postal Check Digit 0x269
Transmit Planet Check Digit 0x26a
Korean 2 of 5 0x271
EAN UCC Composite 0x2b1
EAN UCC Composite Minimum Length 0x2b2
EAN UCC Composite Maximum Length 0x2b3
PDF417 0x2c1
PDF417 Minimum Length 0x2c2
PDF417 Maximum Length 0x2c3
Micro PDF417 0x2d1
Micro PDF417 Minimum Length 0x2d2
Micro PDF417 Maximum Length 0x2d3
MaxiCode 0x2e1
MaxiCode Minimum Length 0x2e2
MaxiCode Maximum Length 0x2e3
Aztec Code 0x2f1
Aztec Code Minimum Length 0x2f2
Aztec Code Maximum Length 0x2f3
Aztec Inverse 0x2f4
Codablock 0x301
Codablock Minimum Length 0x302
Codablock Maximum Length 0x303
Telepen 0x311
Telepen Minimum Length 0x312
Telepen Maximum Length 0x313
Telepen Old Syle Mode 0x314
Set Default Parameter 0x321
Set Code Charset 0x322
OCR 0x331
Set OCR Template 0x332
Composite CC-C 0x341
Composite CC-A/B 0x342
Composite TLC-39 0x343
UPC Composite 0x344
Transmit Code ID Character 0x351
Grid Matrix 0x361

各扫描头参数详细信息见:扫描头条码参数汇总(仅供内部使用)

扫描状态参数

Status Status Number (Hex)
Decode Complete 0x00
Decode Time Out 0x01
Decode has been Canceled 0x02
Some Errors Happened 0x03
Decode Event 0x04