diff --git a/docs/Android扫描接口文档.md b/docs/Android扫描接口文档.md new file mode 100644 index 0000000..c542061 --- /dev/null +++ b/docs/Android扫描接口文档.md @@ -0,0 +1,753 @@ +# 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 Version:2.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: + +```gradle +dependencies { + provided files('libsref/ScannerAPI.jar') +} +``` + +## 所需的相关权限 + +在进行基于我们的扫描 SDK 开发的时候,需在 `AndroidManifest.xml` 的 application 节点下添加以下代码: + +```xml + +``` + +D500/D510/D330S 设备中二维扫描需添加以下权限: + +```xml + + +``` + +**注意点:** + +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()`:关闭扫描键监听 | +| 说明 | 扫描按键监听类 | + +**示例代码:** + +```java +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` 实例 | +| 说明 | 获取扫描类实例 | + +**示例代码:** + +```java +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` 时,才可进行扫描头其他操作。 | + +**示例代码:** + +```java +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 | +| 说明 | 释放扫描头资源 | + +**示例代码:** + +```java +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` | +| 引用类名 | `Scanner`、`DecodeInfoCallBack`、`DecodeInfo` | +| 接口名称 | `setDecodeInfoCallBack` | +| 接口参数 | param1:`DecodeInfoCallBack` | +| 接口返回值 | void | +| 说明 | 设置用户扫描结束后的回调函数,该函数是获取包括条码数据、长度、类型的信息。在设置之前确保实现了 `DecodeInfoCallBack` 中的 `onDecodeComplete` 方法。 | + +**示例代码:** + +```java +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 | +| 说明 | 启用扫描头 | + +**示例代码:** + +```java +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 | +| 说明 | 禁用扫描头,该操作完成后,将无法进行扫描操作 | + +**示例代码:** + +```java +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:需要设置的参数值
参数代码参见:条码设置参数 | +| 接口返回值 | boolean:`true` 设置成功,`false` 设置失败 | +| 说明 | 根据参数代码设置扫描参数值 | + +**示例代码:** + +```java +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 + +**示例代码:** + +```java +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` | +| 接口参数 | param1:int 类型,设置超时时间,单位为: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` | +| 引用类名 | `Scanner`、`VideoCallBack` | +| 接口名称 | `setVideoCallBack` | +| 接口参数 | param1:`VideoCallBack` | +| 接口返回值 | void | +| 说明 | 设置用户扫描进入读取图像模式后的回调函数,该接口仅适用于 A9/A-PAD/A6L-P/CRUISE 中的 S8 | + +**示例代码:** + +```java +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` | +| 引用类名 | `Scanner`、`StatusCallBack` | +| 接口名称 | `setStatusCallBack` | +| 接口参数 | param1:`StatusCallBack` 接口类 | +| 接口返回值 | void | +| 说明 | 设置用户获取当前扫描状态的回调函数,在设置之前务必实现 `StatusCallBack` 中的 `onStatusCallBack` 方法,设置之后有关扫描的状态会自动回调 `onStatusCallBack` 将当前状态反馈给用户 | + +**示例代码:** + +```java +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 | diff --git a/docs/Android扫描服务设置.md b/docs/Android扫描服务设置.md new file mode 100644 index 0000000..ca503a1 --- /dev/null +++ b/docs/Android扫描服务设置.md @@ -0,0 +1,449 @@ +# Android 扫描服务接口设置 + +> 江苏东大集成电路系统工程技术有限公司 +> www.seuic.com + +![SEUIC 东集 Logo 图片占位符] + +> **强烈建议修改广播名称** + +## 修订记录 + +| 版本号 | 修订日期 | 修订内容 | 修订人员 | +| --- | --- | --- | --- | +| 1.0 | 2015/09/21 | 建立本文档 | 徐良伟 | +| 1.1 | 2016/11/07 | 增加过滤条码首尾空格选项 | 罗涛 | +| 1.2 | 2017/03/20 | 扫描特殊功能实现演示 | 罗涛 | +| 1.3 | 2017/05/31 | 加入启用/禁用扫描头以及过滤不可见字符广播接口介绍 | 罗涛 | +| 1.4 | 2017/07/18 | 修正条码参数设置广播接口 | 罗涛 | +| 1.5 | 2018/4/3 | 加入开始/停止扫描广播接口 | 罗涛 | + +## 目录 + +- 概述 + - 硬件平台 + - 软件平台 + - 适用对象 +- 扫描服务应用设置 + - 扫描声音开关 + - 振动开关 + - 连续扫描开关 + - 时间间隔设置 + - 条码前缀参数设置 + - 条码后缀参数设置 + - 开机自启动设置 + - 条码结束符设置 + - 条码发送方式 + - 条码的广播设置 + - 过滤首尾空格开关 + - 条码参数设置 + - 启用/禁用扫描头 + - 过滤不可见字符 + - 开始扫描 + - 停止扫描 +- 扫描特殊功能实现 + - 持续出光模式设置 + +--- + +# 概述 + +东集提供的设备上内置了扫描服务,也提供了相应的设置软件。但部分客户有在自己的应用中定制扫描服务的需求。本文档介绍了如何通过接口来设置扫描服务的部分选项,以便帮助用户更灵活地使用我们的设备。 + +## 硬件平台 + +SDK 适用于以下终端设备: + +- D500 +- D510 +- D330S +- D500P +- D510P +- D330P +- D700 +- D500F +- D700P + +具体使用范围在函数接口说明中指明,若无指明表示都支持。 + +## 软件平台 + +SDK 基于 Android 4.3、Android 4.4、Android 5.1、Android 7.1 版本,支持 Eclipse、Android Studio 开发工具。 + +## 适用对象 + +希望在自己的应用中定制扫描服务的开发人员。 + +--- + +# 扫描服务应用设置 + +扫描服务应用设置支持以下功能的设置: + +- 扫描声音开关 +- 振动开关 +- 连续扫描开关 +- 时间间隔设置 +- 条码前缀参数设置 +- 条码后缀参数设置 +- 开机自启动设置 +- 条码结束符设置 +- 条码发送方式 +- 条码的广播设置 +- 过滤条码首尾空格开关 +- 条码参数设置 +- 启用/禁用扫描头 +- 过滤不可见字符 +- 开始扫描 +- 停止扫描 + +**版本需求:** 扫描应用 1.0.67 及以后,部分设置 1.0.69 及以后。 + +- **1.0.67 支持** + - 扫描声音开关 + - 振动开关 + - 开机自启动设置 + - 条码结束符设置 + - 条码发送方式 + - 条码的广播设置 + - 启用/禁用扫描头 + +- **1.0.69 支持** + - 连续扫描开关 + - 时间间隔设置 + - 条码前缀参数设置 + - 条码后缀参数设置 + - 条码参数设置 + +- **1.1.3 支持** + - 过滤条码首尾空格开关 + - 过滤不可见字符 + +> **备注:** 支持在一条广播中进行多项设置。 + +## 扫描声音开关 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `sound_play` | +| 取值 | boolean 型,true 或 false | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("sound_play", true); +sendBroadcast(intent); +``` + +## 振动开关 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `viberate` | +| 取值 | boolean 型,true 或 false | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("viberate", false); +sendBroadcast(intent); +``` + +## 连续扫描开关 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `scan_continue` | +| 取值 | boolean 型,true 或 false | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("scan_continue", true); +sendBroadcast(intent); +``` + +## 时间间隔设置 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `interval` | +| 取值 | int 型 | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("interval", 3000); +sendBroadcast(intent); +``` + +## 条码前缀参数设置 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `prefix` | +| 取值 | String 型,默认为 `" "` | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("prefix", ""); +sendBroadcast(intent); +``` + +## 条码后缀参数设置 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `suffix` | +| 取值 | String 型,默认为 `" "` | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("suffix", ""); +sendBroadcast(intent); +``` + +## 开机自启动设置 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `boot_start` | +| 取值 | boolean 型,true 或 false | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("boot_start", true); +sendBroadcast(intent); +``` + +## 条码结束符设置 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `endchar` | +| 取值 | 在条码后面附加的结束符,字符串类型,注意大小写,支持以下几种:
 `"ENTER"`:回车
 `"TAB"`:TAB
 `"SPACE"`:空格
 `"NONE"`:无结束符 | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("endchar", "ENTER"); +sendBroadcast(intent); +``` + +## 结束符以 Enter 键发送 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `end_char_on_emu` | +| 取值 | 结束符以 Enter 键发送:模拟按键模式下 | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("end_char_on_emu", true); +sendBroadcast(intent); +``` + +## 条码发送方式 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `barcode_send_mode` | +| 取值 | 扫描服务扫描到条码后的发送方式,字符串类型,注意大小写,支持以下几种:
 `"FOCUS"`:焦点录入
 `"BROADCAST"`:广播
 `"EMUKEY"`:模拟按键
 `"CLIPBOARD"`:剪贴板 | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("barcode_send_mode", "BROADCAST"); +sendBroadcast(intent); +``` + +## 条码的广播设置 + +**条码广播名称** + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `action_barcode_broadcast` | +| 取值 | 字符串类型,默认是:`"com.android.server.scannerservice.broadcast"` | + +**条码键值名称** + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `key_barcode_broadcast` | +| 取值 | 字符串类型,默认是:`"scannerdata"` | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("action_barcode_broadcast", "com.android.server.scannerservice.broadcast"); +intent.putExtra("key_barcode_broadcast", "scannerdata"); +sendBroadcast(intent); +``` + +## 过滤首尾空格开关 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `filter_prefix_suffix_blank` | +| 取值 | boolean 型,true 或 false | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("filter_prefix_suffix_blank", true); +sendBroadcast(intent); +``` + +## 条码参数设置 + +| 项目 | 内容 | +| --- | --- | +| action | `com.seuic.scanner.action.PARAM_SETTINGS` | +| extra1 | `number` | +| 取值 | int 型 | +| extra2 | `value` | +| 取值 | int 型 | + +> 有关扫描参数详情请见:[Android 扫描接口文档(1.0)](./Android扫描接口文档.md) + +**示例:** + +```java +Intent intent = new Intent("com.seuic.scanner.action.PARAM_SETTINGS"); +intent.putExtra("number", 0x01); +intent.putExtra("value", 30); +sendBroadcast(intent); +``` + +## 启用/禁用扫描头 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.ENABLED` | +| extra | `enabled` | +| 取值 | boolean 型,true 或 false | + +**示例:** + +启用扫描头: + +```java +Intent intent = new Intent("com.android.scanner.ENABLED"); +intent.putExtra("enabled", true); +sendBroadcast(intent); +``` + +禁用扫描头: + +```java +Intent intent = new Intent("com.android.scanner.ENABLED"); +intent.putExtra("enabled", false); +sendBroadcast(intent); +``` + +## 过滤不可见字符 + +| 项目 | 内容 | +| --- | --- | +| action | `com.android.scanner.service_settings` | +| extra | `filter_invisible_chars` | +| 取值 | boolean 型,true 或 false | + +**示例:** + +```java +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("filter_invisible_chars", true); +sendBroadcast(intent); +``` + +## 开始扫描 + +| 项目 | 内容 | +| --- | --- | +| action | `com.scan.onStartScan` | + +**示例:** + +开始出光扫描: + +```java +Intent intent = new Intent("com.scan.onStartScan"); +sendBroadcast(intent); +``` + +## 停止扫描 + +| 项目 | 内容 | +| --- | --- | +| action | `com.scan.onEndScan` | + +**示例:** + +停止出光扫描: + +```java +Intent intent = new Intent("com.scan.onEndScan"); +sendBroadcast(intent); +``` + +## 相关常量定义 + +```java +private final String TYPE_KEYUP_TO_STOP_SCAN = "keyup_to_stop_scan"; // 抬起停止扫描 +private final String TYPE_ENDCHAR_ON_EMU = "end_char_on_emu"; // 结束符以模拟按键方式发送 +private final String TYPE_ENTER_EVENT = "end_event"; // 默认广播时条码后添加回车事件 +private final String TYPE_FILTER_INVISIBLE_CHARS = "filter_invisible_chars"; // 过滤不可见字符 +private final String TYPE_FILTER_PREFIX_SUFFIX_BLANK = "filter_prefix_suffix_blank"; // 过滤首尾空格 +``` + +--- + +# 扫描特殊功能实现 + +## 持续出光模式设置 + +**示例代码:** + +```java +// 将连续扫描打开 +Intent intent = new Intent("com.android.scanner.service_settings"); +intent.putExtra("scan_continue", true); +sendBroadcast(intent); + +// 设置条码参数持续出光为开 +Intent intentParam = new Intent("com.android.scanner.PARAM_SETTINGS"); +intent.putExtra("number", 0x0c); +intent.putExtra("value", 1); +sendBroadcast(intentParam); +``` diff --git a/docs/D500_Android_SDK使用说明书.md b/docs/D500_Android_SDK使用说明书.md new file mode 100644 index 0000000..37175cb --- /dev/null +++ b/docs/D500_Android_SDK使用说明书.md @@ -0,0 +1,663 @@ +# D500 Android SDK 使用说明书 + +> 江苏东大集成电路系统工程技术有限公司 +> www.seuic.com + +![SEUIC 东集 Logo 图片占位符] + +## 修订记录 + +| 版本号 | 修订日期 | 修订内容 | 修订人员 | +| --- | --- | --- | --- | +| 0.0 | 2014/08/05 | 建立本文档 | 钱进 | +| 0.1 | 2014/08/05 | 加入 keypad、touch 接口的说明 | 张松 | +| 0.2 | 2014/08/08 | 更改文档模板,并按模板重写文档 | 徐良伟 | +| 1.0 | 2014/08/09 | 加入"系统包的使用",并按 touch 新接口修改文档 | 徐良伟 | +| 1.1 | 2014/09/02 | 加入 touch 新的接口说明 加入 misc 接口 | 魏启运 | +| 1.2 | 2015/04/29 | 在 misc 接口中增加启用/禁用状态栏下拉的接口,增加卸载/加载外置 SD 卡的接口 | 张松 | +| 1.3 | 2017/03/16 | 在 misc 接口中添加 Zigbee 及 Fingerprint 的访问接口 | 钱进 | +| 1.4 | 2017/03/29 | 更新 Zigbee 和 Fingerprint 接口 | 徐良伟 | + +## 目录 + +- 概述 + - 硬件平台 + - 软件平台 + - 适用对象 + - 系统包的使用 +- 触摸屏接口 + - TouchService 类 +- 键盘接口 + - KeypadService 类 +- Misc 接口 + - Misc 类 + - Zigbee 类 + - Fingerprint 类 + - Manager 类 + +--- + +# 概述 + +本文档介绍了 D500 上提供的设备相关的包的使用说明,以便帮助用户更好的使用终端产品提供的特殊功能。 + +## 硬件平台 + +SDK 适用于以下终端设备: + +- D500 +- D510 +- D330S + +具体使用范围在函数接口说明中指明,若无指明表示都支持。 + +## 软件平台 + +SDK 基于 Android 4.3 版本,支持 eclipse 开发工具。 + +## 适用对象 + +除了 Android 的标准功能外,希望用到设备提供的增值功能的开发人员。这部分增值功能包括一维扫描、二维扫描、键盘特殊设置、触摸特殊设置等实用功能。 + +## 系统包的使用 + +如果接口中标明是系统包,表明该包是内置到系统中的,无需将该包加入到 apk 中。下面以键盘接口为例,来说明如何在 eclipse 中使用系统包。 + +- 在工程目录下建一个 `libsref` 目录(目录名称可以任意指定),将 `keypad.jar` 拷贝到此目录下。 +- 在 eclipse 中选中工程,在菜单中选择 Project → Properties → Java Build Path,点击 **Add External JARS...** 按钮,选择刚才的 `keypad.jar`。这时可以在工程视图的 Referenced Libraries 下看到刚才我们引用的 `keypad.jar`,展开可以看到所有 `keypad.jar` 提供的包、类、函数、变量。 +- `AndroidManifest.xml` 中使用 `uses-library` 用包名来标示 `keypad.jar` 是引用包。 + +```xml + + …… + +``` + +--- + +# 触摸屏接口 + +| 项目 | 内容 | +| --- | --- | +| 包名 | `com.seuic.touch` | +| 包文件 | `touch.jar` | +| 系统包 | 是 | +| 包含的类 | `TouchService` | +| 作用 | 提供触摸屏相关的控制接口 | + +## TouchService 类 + +### 使用方法 + +```java +import com.seuic.touch.TouchService; +TouchService touch = TouchService.getInstance(); +``` + +### 函数接口 + +| 函数 | 说明 | +| --- | --- | +| `getGloveMode` | 获取当前手套模式开关状态 | +| `setGloveMode` | 设置手套模式开关 | +| `getTouchEnabled` | 获取当前触屏使能状态 | +| `setTouchEnabled` | 设置触摸屏使能开关 | +| `getVirKeyDisabled` | 获取虚拟按键屏蔽状态(仅 D500 支持) | +| `setVirKeyDisabled` | 设置虚拟按键屏蔽状态(仅 D500 支持) | + +#### 1. 获取当前手套模式开关状态 + +```java +int getGloveMode() +``` + +**参数:** 无 + +**返回值:** 返回手套模式状态,有以下几种: + +| 状态 | 值 | 说明 | +| --- | --- | --- | +| `MODE_GLOVE_OFF` | 0 | 手套模式关闭 | +| `MODE_GLOVE_ON` | 1 | 手套模式打开 | +| | <0 | 触摸接口不正常,或该设备不支持手套模式设置 | + +#### 2. 设置手套模式开关 + +```java +boolean setGloveMode(int mode) +``` + +**参数:** + +- `mode`:手套模式状态,见 `getGloveMode()` 函数返回值的说明。 + +**返回值:** 返回 `true` 表示成功,`false` 表示失败。 + +#### 3. 获取当前触摸屏使能状态 + +```java +int getTouchEnable() +``` + +**参数:** 无 + +**返回值:** 返回触摸屏使能状态,有以下几种: + +| 状态 | 值 | 说明 | +| --- | --- | --- | +| `TOUCH_ENABLED_OFF` | 0 | 触摸屏处于锁屏状态 | +| `TOUCH_ENABLED_ON` | 1 | 触摸屏处于正常使用状态 | +| | <0 | 触摸接口不正常,或该设备不支持触摸屏使能设置 | + +#### 4. 设置触摸屏使能开关 + +```java +boolean setTouchEnabled(int enable, Context context) +``` + +**参数:** + +- `enable`:触摸屏使能状态,见 `getTouchEnabled()` 函数返回值的说明。 +- `context`:调用者的上下文,用于向系统广播锁屏通知,以便在通知栏显示当前锁屏状态。 + +**返回值:** 返回 `true` 表示成功,`false` 表示失败。 + +#### 5. 获取虚拟按键屏蔽状态 + +```java +int getVirKeyDisabled() +``` + +**参数:** 无 + +**返回值:** 返回虚拟按键屏蔽状态,有以下几种: + +| 状态 | 值 | 说明 | +| --- | --- | --- | +| `VKEY1_DISABLE_MASK` | `1 << 0` | 虚拟键一被屏蔽 | +| `VKEY2_DISABLE_MASK` | `1 << 1` | 虚拟键二被屏蔽 | +| `VKEY3_DISABLE_MASK` | `1 << 2` | 虚拟键三键被屏蔽 | +| `VKEY_ALL_DISABLE_MASK` | `0x7` | 所有虚拟按键均屏蔽 | +| | 0 | 所有虚拟按键未被屏蔽 | +| | <0 | 触摸接口不正常,或设备不支持触摸屏设置 | + +#### 6. 设置虚拟按键屏蔽状态 + +```java +boolean setVirKeyDisabled(int disableMask) +``` + +**参数:** + +- `disableMask`:虚拟按键屏蔽状态,见 `getVirKeyDisabled()` 函数返回值的说明。 + +**返回值:** 返回 `true` 表示成功,`false` 表示失败。 + +--- + +# 键盘接口 + +| 项目 | 内容 | +| --- | --- | +| 包名 | `com.seuic.keypad` | +| 包文件 | `keypad.jar` | +| 系统包 | 是 | +| 包含的类 | `KeypadService` | +| 作用 | 提供键盘相关的控制接口 | + +## KeypadService 类 + +### 使用方法 + +```java +import com.seuic.keypad.KeypadService; +KeypadService keypad = KeypadService.getInstance(); +``` + +### 函数接口 + +| 函数 | 说明 | +| --- | --- | +| `getMode` | 获取键盘模式(仅 D500 支持) | +| `setMode` | 设置键盘模式(仅 D500 支持) | + +#### 1. 获取键盘模式 + +```java +int getMode() +``` + +**参数:** 无 + +**返回值:** 返回键盘功能键模式,有以下几种: + +| 状态 | 值 | 说明 | +| --- | --- | --- | +| `MODE_NORMAL` | 0 | 标准模式。根据当前 Num、Fn 的状态灯输出数字或功能键。 | +| `MODE_STICK_ONCE` | 1 | Fn 键只粘滞一次模式。当处于 Fn 状态时,按一下按键输出功能键,然后自动切换到 Num 模式。 | +| | <0 | 键盘接口不正常,或该设备不支持键盘模式设置 | + +#### 2. 设置键盘模式 + +```java +boolean setMode(int mode) +``` + +**参数:** + +- `mode`:键盘模式状态,见 `getMode()` 函数返回值的说明。 + +**返回值:** 返回 `true` 表示成功,`false` 表示失败。 + +--- + +# Misc 接口 + +| 项目 | 内容 | +| --- | --- | +| 包名 | `com.seuic.misc` | +| 包文件 | `misc.jar` | +| 系统包 | 是 | +| 包含的类 | `Misc` | +| 作用 | 提供系统其它接口 | + +## Misc 类 + +### 使用方法 + +```java +import com.seuic.misc.Misc; +Misc misc = new Misc(); +``` + +### 函数接口 + +| 函数 | 说明 | +| --- | --- | +| `getSN` | 获取设备 SN | +| `getStatusBarEnabled` | 获取系统状态栏是否允许下拉的状态 | +| `setStatusBarEnabled` | 设置系统状态栏是否允许下拉 | +| `getExtSDCardMounted` | 获取外置 SD 卡是否卸载 | +| `setExtSDCardMounted` | 设置外置 SD 卡卸载或加载 | +| `getCustomId` | 获取用户自定义序列号。仅支持 D700_V1.6.0 及之后版本,D700C_V1.2.0 及之后版本,D700P_V1.1.2 及之后版本。 | + +#### 1. 获取设备 SN + +```java +String getSN() +``` + +**参数:** 无 + +**返回值:** 返回厂家定义的 SN 号,有以下几种: + +| 状态 | 值 | 说明 | +| --- | --- | --- | +| null | null | 获取 SN 失败 | +| String 类型 | String 类型 | 获取成功 | + +#### 2. 获取系统状态栏是否允许下拉的状态 + +```java +int getStatusBarEnabled(Context context) +``` + +**参数:** + +- `context`:上下文。 + +**返回值:** 返回状态栏是否允许下拉的状态,如下: + +| 状态 | 值 | 说明 | +| --- | --- | --- | +| `STATUSBAR_DISABLED` | 0 | 系统状态栏不允许下拉。 | +| `STATUSBAR_ENABLED` | 1 | 系统状态栏允许下拉。 | +| | <0 | 接口不正常,或该设备不支持系统状态栏的设置。 | + +#### 3. 设置系统状态栏是否允许下拉 + +```java +void setStatusBarEnabled(Context context, int enable) +``` + +**参数:** + +- `context`:上下文。 +- `enable`:状态栏是否允许下拉,取值见 `getStatusBarEnabled()` 返回值。 + +**返回值:** 无 + +#### 4. 获取外置 SD 卡是否卸载 + +```java +int getExtSDCardMounted(Context context) +``` + +**参数:** + +- `context`:上下文。 + +**返回值:** 返回外置 SD 卡的状态,如下: + +| 状态 | 值 | 说明 | +| --- | --- | --- | +| `EXT_SDCARD_UNMOUNTED` | 0 | 外置 SD 卡卸载。 | +| `EXT_SDCARD_MOUNTED` | 1 | 外置 SD 卡未卸载。 | +| | <0 | 接口不正常,或该设备不支持外置 SD 卡的卸载。 | + +#### 5. 设置外置 SD 卡卸载或装载 + +```java +void setExtSDCardMounted(Context context, int enable) +``` + +**参数:** + +- `context`:上下文。 +- `enable`:设置外置 SD 卡的卸载加载,取值见 `getExtSDCardMounted()` 返回值。 + +**返回值:** 无 + +#### 6. 获取用户自定义序列号 + +```java +String getCustomId() +``` + +**参数:** 无 + +**返回值:** 返回用户自定义序列号,**仅 D700 系列支持,其它项目请勿调用此函数,会异常**。 + +返回值有以下几种: + +| 状态 | 值 | 说明 | +| --- | --- | --- | +| null | null | 获取用户自定义序列号失败 | +| String 类型 | String 类型 | 获取成功 | + +## Zigbee 类 + +### 使用方法 + +```java +import com.seuic.misc.Zigbee; +Zigbee zigbee = new Zigbee(); +``` + +### 操作流程 + +参考流程:`open` → `powerOn` → `read & write` → `powerOff` → `close` + +该类提供的函数可以分为两组,一组是用于模块的上电/断电,一组用于串口的操作。模块的上电和串口打开谁先谁后并没有严格的顺序,视具体设备要求。 + +### 函数接口 + +| 函数 | 说明 | +| --- | --- | +| `getDeviceName` | 获取设备名称 | +| `powerOn` | 设备上电 | +| `powerOff` | 设备断电 | +| `open` | 打开设备,包括打开串口,不包括上电 | +| `close` | 关闭设备,包括关闭串口,不包括断电 | +| `read` | 封装对设备的读操作 | +| `write` | 封装对设备的写操作 | + +#### 1. 获取设备名称 + +```java +public String getDeviceName() +``` + +**参数:** 无 + +**返回值:** 该设备连接的串口设备文件,如 `/dev/ttyUART0` + +#### 2. 设备上电 + +```java +public void powerOn() +``` + +**参数:** 无 + +**返回值:** 无 + +#### 3. 设备断电 + +```java +public void powerOff() +``` + +**参数:** 无 + +**返回值:** 无 + +#### 4. 打开设备,包括打开串口 + +```java +public boolean open() +public boolean open(int baudrate) +public boolean open(int baudrate, int dataBits, int stopBits, int parity) +``` + +**参数:** + +- `baudrate`:波特率,如 `115200` +- `dataBits`:数据位,目前支持 `5`、`6`、`7`、`8` +- `stopBits`:停止位,目前支持 `1`、`2` +- `parity`:奇偶校验 + - `'n'` 或 `'N'`:无奇偶校验 + - `'o'` 或 `'O'`:奇校验 + - `'e'` 或 `'E'`:偶校验 + - `'m'` 或 `'M'`:标记检验 + - `'s'` 或 `'S'`:空白校验 + +**返回值:** 成功或失败 + +**备注:** 提供 3 个 `open` 接口简化串口的参数设置,默认串口 115200,8 位数据位,1 位停止位,无奇偶校验。用户可以根据实际情况选择相应的接口。 + +#### 5. 关闭设备,包括关闭串口 + +```java +public void close() +``` + +**参数:** 无 + +**返回值:** 无 + +#### 6. 封装对设备的读操作 + +```java +public byte[] read(int len, int timeout) +``` + +**参数:** + +| 参数 | 类型 | 说明 | +| --- | --- | --- | +| `len` | int | 要读取的长度 | +| `timeout` | int | 超时,单位毫秒 | + +**返回值:** 读取到的字节数组,失败的话返回 `null` + +#### 7. 封装对设备的写操作 + +```java +public boolean write(byte[] data, int len) +``` + +**参数:** + +| 参数 | 类型 | 说明 | +| --- | --- | --- | +| `data` | byte[] | 要写入设备的字节数组 | +| `len` | int | 要写入的长度,应当 <= data 的实际长度 | + +**返回值:** 成功或失败 + +## Fingerprint 类 + +### 使用方法 + +```java +import com.seuic.misc.Fingerprint; +Fingerprint fingerprint = new Fingerprint(); +``` + +### 操作流程 + +`open` → `powerOn` → `read & write` → `powerOff` → `close` + +> 有的指纹模块可能需要先 `powerOn` 再 `open`,请和模块厂家确认。 + +该类提供的函数可以分为两组,一组是用于模块的上电/断电,一组用于串口的操作。模块的上电和串口打开谁先谁后并没有严格的顺序,视具体设备要求。 + +### 函数接口 + +| 函数 | 说明 | +| --- | --- | +| `getDeviceName` | 获取设备名称 | +| `powerOn` | 设备上电 | +| `powerOff` | 设备断电 | +| `open` | 打开设备,包括打开串口,不包括上电 | +| `close` | 关闭设备,包括关闭串口,不包括断电 | +| `read` | 封装对设备的读操作 | +| `write` | 封装对设备的写操作 | + +#### 1. 获取设备名称 + +```java +public String getDeviceName() +``` + +**参数:** 无 + +**返回值:** 该设备连接的串口设备文件,如 `/dev/ttyUART0` + +#### 2. 设备上电 + +```java +public void powerOn() +``` + +**参数:** 无 + +**返回值:** 无 + +#### 3. 设备断电 + +```java +public void powerOff() +``` + +**参数:** 无 + +**返回值:** 无 + +#### 4. 打开设备,包括打开串口 + +```java +public boolean open() +public boolean open(int baudrate) +public boolean open(int baudrate, int dataBits, int stopBits, int parity) +``` + +**参数:** + +- `baudrate`:波特率,如 `115200` +- `dataBits`:数据位,目前支持 `5`、`6`、`7`、`8` +- `stopBits`:停止位,目前支持 `1`、`2` +- `parity`:奇偶校验 + - `'n'` 或 `'N'`:无奇偶校验 + - `'o'` 或 `'O'`:奇校验 + - `'e'` 或 `'E'`:偶校验 + - `'m'` 或 `'M'`:标记检验 + - `'s'` 或 `'S'`:空白校验 + +**返回值:** 成功或失败 + +**备注:** 提供 3 个 `open` 接口简化串口的参数设置,默认串口 115200,8 位数据位,1 位停止位,无奇偶校验。用户可以根据实际情况选择相应的接口。 + +#### 5. 关闭设备,包括关闭串口 + +```java +public void close() +``` + +**参数:** 无 + +**返回值:** 无 + +#### 6. 封装对设备的读操作 + +```java +public byte[] read(int len, int timeout) +``` + +**参数:** + +| 参数 | 类型 | 说明 | +| --- | --- | --- | +| `len` | int | 要读取的长度 | +| `timeout` | int | 超时,单位毫秒 | + +**返回值:** 读取到的字节数组,失败的话返回 `null` + +#### 7. 封装对设备的写操作 + +```java +public boolean write(byte[] data, int len) +``` + +**参数:** + +| 参数 | 类型 | 说明 | +| --- | --- | --- | +| `data` | byte[] | 要写入设备的字节数组 | +| `len` | int | 要写入的长度,应当 <= data 的实际长度 | + +**返回值:** 成功或失败 + +## Manager 类 + +### 使用方法 + +```java +import com.seuic.misc.Manager; +Manager manager = new Manager(context); +``` + +### 函数接口 + +| 函数 | 说明 | +| --- | --- | +| `enableUsb` | 使能/禁用 USB。使能状态下,usb 才可以设置为 mtp/ptp/U 盘模式。仅支持 D700_V1.6.0 及之后版本。 | +| `isUsbEnabled` | 查看 USB 使能状态。仅支持 D700_V1.6.0 及之后版本。 | + +#### 1. 使能/禁用 USB + +```java +public boolean enableUsb(boolean enable) +``` + +**参数:** + +- `enable`: + - `true`:使能 + - `false`:禁用 + +**返回值:** 设置是否成功。 + +#### 2. 查看 USB 使能状态 + +```java +public boolean isUsbEnabled() +``` + +**参数:** 无 + +**返回值:** `true` 表示使能,`false` 表示禁用。默认是使能状态。