更新记录
1.2.0(2026-10-01)
- 新增 uni-app x Android Vapor 蒸汽模式接入,使用完整 JavaScript API 入口;要求 HBuilderX 5.21+、Android 6.0 / API 23+。传统 uni-app 与标准 VDOM 仍按原最低版本接入。
.uvue扫码组件改为组合式,保留 disabled、command(label, result) 与公开 start() / stop();同一组件兼容 VDOM 与 Vapor。- 修复生产 UTS Kotlin 编译插件改写引用比较后,监听代理在厂家注销时递归调用 equals 导致释放失败的问题。
- 新增完整 Vapor 示例及接入文档;公开示例现含传统 uni-app、标准 uni-app x、uni-app x Vapor 三个独立宿主工程,不附插件实现或厂家 JAR。
- 完成 Vapor、VDOM、传统 Vue 2 / Vue 3 编译回归。T1Pro 蒸汽页面连续三次成功扫码;身份比较修复后最终诊断包单独验证开始、停止、注销和释放。两种原生编译模式均通过 19 个场景、388 个断言。
- 厂家 JAR 与接口范围不变;OCR 三接口仍需新版 SDK。Vapor 取图、多码、全部硬件配置和长时稳定性尚未逐项复测,业务正式包仍须目标设备验收。
1.1.0(2026-10-01)
- 新增传统 uni-app Vue 2 / Vue 3 Android
.vue支持,保留 uni-app x.uvue/ UTS 接入;最低 HBuilderX 4.27。 - 新增完整 JavaScript 入口与
.vue扫码按钮组件,修复传统 JS 桥接下常量缺失和可空字段缺省;保留 false、0、空字符串。 - 扫码监听支持持续回调;新增应用共享扫描会话,支持多页面业务订阅和取消,减少重复原生注册。
- 提供传统 uni-app 与 uni-app x 两套独立示例。Vue 2 / Vue 3 编译通过;T1Pro Android 14 上 Vue 3 连续成功扫码、Vue 2 连续失败扫码事件回调均通过,uni-app x 联编回归通过。
- 随附 SDK 仍覆盖 39 个厂家方法、41 个厂家常量。OCR 三个接口仍需厂家新版 SDK;多码、各项硬件设置、长期稳定性及业务正式包仍须在目标设备验收。
1.0.0(2026-10-01)
- 首次发布 iData iScanPro / iScanPlus 的 uni-app x Android UTS 封装。
- 覆盖随附 SDK 的 39 个公开接口与 41 个常量,提供扫码、多码、图像回调及扫描配置。
- 支持主线程回调、监听注销重试、原始图像缓存与参数校验。
- 兼容 T1Pro 新固件的解码版本查询;已实测二维码识别与原始图像回调。
- OCR 提供兼容入口和能力检测,随附 JAR 不含 OCR 三接口,需匹配的新版厂家 SDK。
平台兼容性
uni-app(4.27)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.1.0 | √ | 1.1.0 | × | × | √ | - | √ | × | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.27)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | √ | × | × | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
iDataPDAScannerUTS
1.2.0 支持传统 uni-app Vue 2 / Vue 3、uni-app x 标准 VDOM 与 uni-app x Vapor 蒸汽模式。面向具备 iData 扫描系统服务的 Android PDA,使用同一份 iScanPro / iScanPlus 原生封装,同时提供 .vue / .uvue 开始、停止扫描按钮组件。
本插件是第三方接入封装,不是 iData 官方插件。
支持范围
- 完整封装随附
iscanuserapi.jar的 39 个 public 方法、41 个 ConstantUtil 常量,保留厂家方法名和参数含义。 - 普通扫码、多码配置、连续扫码、扫描键、输出方式、提示音、振动、灯光、结束符、前后缀、过滤、编码、解码区域、条码开关、AIM ID、批量读取及通用布尔配置。
- 普通与图像字节持续回调;支持厂家图片路径、原始文件或 Base64、单图大小限制和缓存清理。
- SDK / 系统服务能力探测、扫描引擎与解码版本查询。JavaScript 入口提供 48 个函数、86 个常量,包含原厂家接口与辅助接口 / 常量。
OCR 限制:随附厂家 JAR 缺少 setOCREnable / registerScanImage / unregisterScanImage 三个接口。当前仅提供能力检测、升级兼容入口和明确错误,不能启用这些能力。 如需 OCR,须取得与设备固件匹配的厂家新版 SDK,替换后重新构建并实测。视频图像回调不等于通用文字识别引擎。
多码与取图受扫描头、系统服务和固件限制;厂家文档将部分功能限定在 DS7000 / 7000Pro,不保证全部 iData 机型具有相同能力。
运行条件
| 工程 | 最低 HBuilderX | Android 要求 | 运行入口 |
|---|---|---|---|
传统 uni-app Vue 2 / Vue 3 .vue |
4.27+ | 插件最低声明 5.0,需兼容 iData 服务 | @/uni_modules/idata-iscan/js_sdk/index.js |
uni-app x 标准 VDOM .uvue |
4.27+ | 插件最低声明 5.0,需兼容 iData 服务 | @/uni_modules/idata-iscan |
uni-app x Vapor 蒸汽模式 .uvue |
5.21+ | 6.0 / API 23+,需兼容 iData 服务 | @/uni_modules/idata-iscan/js_sdk/index.js |
不支持无 iData 扫描服务的普通手机和模拟器,也不支持 iOS、鸿蒙、Web、小程序。nvue 页面尚未单独验收,不列为已验证支持。
蒸汽模式的页面与组件使用组合式,App 使用 onAppHide 等应用生命周期,项目配置示例:
"uni-app-x": {
"vapor": true,
"styleIsolationVersion": "2",
"vapor-render-target": "bytecode"
}
安装与公开示例
- 从插件市场导入,确认完整目录为
uni_modules/idata-iscan,保留utssdk/app-android/libs/iscanuserapi.jar。 - 配置业务自己的 DCloud AppID、Android 包名和签名。
- 首次接入或变更原生插件后,重新制作包含插件的 Android 自定义基座,或完整打包安装。 默认基座与页面热更新无法新增或替换 Kotlin / JAR 原生依赖。
- 在兼容 iData PDA 上运行,检查
init()与getCapabilities()。
公开示例合集提供 uni-app、uni-app-x、uni-app-x-vapor 三个独立工程,均包含完整的扫描、配置、查询、图像与生命周期联调页面。请用 HBuilderX 打开对应子目录,先从插件市场导入插件,再运行示例。公开示例仅提供宿主调用页面,不包含插件实现、原生桥、厂家 JAR、测试或签名工具,AppID 留空供业务填写。
普通授权版 0.01 元,源码授权版 15 元,最终以平台页面和订单为准。授权范围、绑定和交付方式遵循平台规则;源码授权提供插件封装源码,厂家 JAR 仍是二进制依赖,不包含厂家 SDK 源码。
按项目选择导入方式
传统 uni-app JavaScript 与 uni-app x 蒸汽模式的运行函数和常量:
import * as iScan from '@/uni_modules/idata-iscan/js_sdk/index.js'
uni-app x 标准 VDOM 的 UTS:
import * as iScan from '@/uni_modules/idata-iscan'
.uvue 需要类型提示时,可在两种模式中使用:
import type { CommandResult, ScanResult, ScanImageResult } from '@/uni_modules/idata-iscan'
JavaScript 入口补齐字符串常量和被跨桥省略的可空字段,保留 false、0 和空字符串。传统接入及共享会话见 下载包内 docs/UNI-APP.md,蒸汽模式完整说明见 下载包内 docs/VAPOR.md。
uni-app x 最小接入示例
以下组合式示例根据编译模式选择入口,适用于标准 VDOM 与蒸汽模式:
<template>
<view>
<idata-iscan :disabled="!ready" @command="" />
<text>{{ resultText }}</text>
</view>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import { onLoad, onHide, onUnload } from '@dcloudio/uni-app'
// #ifndef VUE3-VAPOR
import * as iScan from '@/uni_modules/idata-iscan'
// #endif
// #ifdef VUE3-VAPOR
import * as iScan from '@/uni_modules/idata-iscan/js_sdk/index.js'
// #endif
import type { CommandResult, ScanResult } from '@/uni_modules/idata-iscan'
const ready = ref(false)
const resultText = ref('等待初始化')
function (label: string, result: CommandResult) {
if (!result.ok) resultText.value = label + ':' + result.message
}
onLoad(() => {
const initialized = iScan.init()
if (!initialized.ok) { resultText.value = initialized.message; return }
const output = iScan.setOutputMode(iScan.OUTPUT_BROADCAST)
if (!output.ok) { resultText.value = output.message; return }
const registered = iScan.registerScan((event: ScanResult) => {
resultText.value = event.success ? (event.data ?? '') : '本次未识别到条码'
})
ready.value = registered.ok
resultText.value = registered.ok ? '请按扫描键' : registered.message
})
onHide(() => { if (ready.value) iScan.scan_stop() })
onUnload(() => {
ready.value = false
const result = iScan.release()
if (!result.ok) console.error(result.message)
})
</script>
按钮组件的 command 事件传入 (label, result),并公开 start() / stop() 方法。组件只触发扫描命令;页面负责初始化、配置、监听与释放。
生命周期与调用约定
- 命令返回
{ ok, code, message },查询额外返回value。ok=true仅表示 SDK 接受调用,实际条码结果以回调success为准,硬件设置效果需实测。 - 插件是 App 级单例,每种监听只有一个回调槽位。三个持续回调已保活,不要在每次按键、扫码事件或定时器中重复注册。
- 多页面业务推荐
js_sdk/scan-session.js的createScanSession():页面订阅与取消业务回调,应用在整个扫描业务结束时统一destroy()。不要混用会话管理器与页面原始注册 / 释放。原生注销不表示 JS 桥立即释放全部保活记录。 - 原生结果由 Android 主线程转发;传统 uni-app 与蒸汽模式再由框架送至页面 JavaScript。注销 / 替换前已排队的事件不会误投给新监听。
init()幂等,不自动上下电或更改设备参数;release()停扫、注销、恢复本插件禁用的扫描键并关闭本插件启用的 OCR,不恢复全部设备设置。lockScanKey(true)允许实体扫描键,false禁用;close()仅给扫描头断电,不等于释放。- 条码配置 ID 与扫码回调
type是不同编号;保留厂家拼写setEncodeFormart(),同时提供setEncodeFormat()别名。
图像与错误处理
registerScan() 保留厂家图片路径。registerScan2() 将原始字节写入私有缓存或返回 Base64;使用 setImageOptions({ mode: 'file', maxBytes: 16777216, maxFiles: 32 }) 配置。mode 可为 file / base64 / none,单图上限最高 64 MiB,文件保留数允许 1–256。
取图还需硬件支持与相应厂家配置。原始数据不保证是 JPEG / PNG,.bin 或 Base64 不一定可直接传给 <image>。图像处理失败仍保留条码结果,通过 imageError 报告;需永久保存时及时复制到自己的目录。clearImageCache() 只清理本插件缓存,不删除厂家文件。
完整接口、参数和常量对照见 下载包内 docs/API.md,类型见 utssdk/interface.uts。
| 错误码 | 含义 |
|---|---|
| 0 | SDK 调用完成 |
| 9001 | 尚未初始化 |
| 9002 | 缺少兼容 iData 系统服务 |
| 9003 | SDK 缺少类、方法或监听接口,当前 JAR 的 OCR 属于此情况 |
| 9004 | 参数类型或范围无效 |
| 9005 | 原生调用、注册、注销或清理失败 |
| 9006 | 图像处理失败,异步事件通过 imageError 说明 |
离线宿主启用 R8 / ProGuard 时,请显式合并 proguard-rules.pro,不声称该规则由 HBuilderX 自动合并。
已验证与未测边界
- 1.2.0 使用 HBuilderX 5.23 完成传统 Vue 2 / Vue 3、VDOM 与 Vapor 的实际前端及原生联合编译;Vapor 同时检查 JavaScript、视图字节码、48 个函数、86 个常量、3 个持续回调与 21 个可空结果样本。
- T1Pro / Android 14 的真实 Vapor 页面连续三次成功扫码。收尾发现监听代理身份比较引发注销递归,已修复;三次扫码发生在该修复前,修复后最终 APK 单独验证开始、停止、注销和释放成功,前端 JavaScript / 字节码保持一致。
- 修复后的普通 Kotlin 与生产 DCloud Kotlin 编译插件两种原生回归模式均通过 19 个场景、388 个断言,覆盖真实 ArrayList 注销语义与代理相等性。
- 传统 Vue 3 曾连续五次成功扫码;Vue 2 完成初始化及连续失败扫描事件回调,未另行验收成功条码。共享原生实现曾在同机验证原始图像与解码版本查询。
- 本轮未逐项复测 Vapor 取图、多码、全部硬件设置及长时稳定性。所有真机证据来自独立诊断包,不能代替业务 AppID / 包名下的正式自定义基座或完整包验收。详细范围见 下载包内
docs/TESTING.md。
隐私与依赖
无广告,不声明额外 Android 权限,不申请相机或外部存储权限。封装代码在设备本地接收条码、图像及元数据并交给宿主,不向外部服务器发送数据,不包含统计 SDK;图像可按设置临时写入应用私有缓存。
厂家 iscanuserapi.jar 用于访问预装扫描服务,其行为与授权由厂家和固件决定。插件源码授权不重新授予厂家 SDK 或第三方代码的权利。

收藏人数:
购买源码授权版(
试用
使用 HBuilder 导入示例项目
赞赏(0)
下载 3
赞赏 0
下载 12765983
赞赏 1959
赞赏
京公网安备:11010802035340号