更新记录
1.0.15(2026-03-27)
- 修复 Android 端
beepOnScan/vibrateOnScan仅有类型与文档、未实际生效的问题。 - 扫码成功与相册识别成功后,现可按配置播放提示音与触发短震动。
1.0.14(2026-03-27)
showScanFrame=false时进一步去除扫码遮罩层,不再保留中间透明方框,仅保留扫描线与提示文字。- 同步更新参数与 UI 约定文档描述。
平台兼容性
uni-app(4.84)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | √ | √ | √ | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.84)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | √ | - | - | - |
lizhao-scan-pro
lizhao-scan-pro 是跨端 UTS 扫码插件,仅提供 API 模式;调用后直接打开原生全屏扫码界面,底层使用 UTS + CameraX + ML Kit 实现。
支持平台
| 平台 | 是否支持 | 说明 |
|---|---|---|
| uni-app | 是 | Vue2/Vue3 可用 |
| uni-app x | 是 | App 侧可用 |
| Android | 是 | 原生依赖入口已配置 |
| iOS | 否 | 当前返回 9010001(原生实现开发中) |
| Harmony | 否 | 返回 9010001 |
| Web | 否 | 返回 9010001 |
| 微信小程序 | 否 | 返回 9010001 |
| 支付宝小程序 | 否 | 返回 9010001 |
安装说明
import * as LizhaoScanPro from '@/uni_modules/lizhao-scan-pro'
本插件不提供 <lizhao-scan-pro /> 组件标签,统一通过 script 中的 API 调用。
本插件不再提供 common/core.js 等 JS 包装入口,统一通过 UTS API 入口调用。
API 列表
startScan(options)stopScan(options)pauseScan(options)resumeScan(options)setTorchEnabled(options)setZoomRatio(options)pickImageAndScan(options)setScanFormats(options)postOverlayMessage(options)destroyScanner(options)
参数说明(ScanOptions)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| scannerId | string | 否 | 扫描器 ID | default |
任意非空字符串 |
| formats | Array |
否 | 识别格式列表 | ["all"] |
all / qrCode / aztec / codabar / code39 / code93 / code128 / dataMatrix / ean8 / ean13 / itf / pdf417 / upcA / upcE |
| continuous | boolean | 否 | 是否连续扫码 | false |
true / false |
| enableAlbum | boolean | 否 | 是否在原生扫码全屏界面右上角显示相册入口(仅 startScan 生效) |
false |
true / false |
| enableTorch | boolean | 否 | 是否启用闪光灯 | false |
true / false |
| zoomRatio | number | 否 | 缩放倍率 | 1 |
大于 0 的数值 |
| showScanFrame | boolean | 否 | 是否显示红色扫码角框与中间透明框遮罩;传 false 时隐藏角框和遮罩仅保留扫描线 |
true |
true / false |
| scanLineColor | string | 否 | 扫描线颜色 | #FF3B30 |
#RRGGBB / #AARRGGBB |
| tipText | string | 否 | 提示文案 | 请将二维码/条形码放入框内 |
任意字符串 |
| beepOnScan | boolean | 否 | Android 成功识别时播放提示音;对相机扫码与相册识别都生效 | false |
true / false |
| vibrateOnScan | boolean | 否 | Android 成功识别时触发短震动;对相机扫码与相册识别都生效 | false |
true / false |
| overlayConfig | OverlayConfig | 否 | 遮罩事件透传配置(不加载 webview) | null |
enabled / htmlUrl / bridgeName / userAgentSuffix |
| permissionRationale | PermissionRationale | 否 | 权限说明文案 | null |
cameraTitle / cameraMessage / albumTitle / albumMessage |
回调说明(startScan)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options.onResult | function | 否 | 单次或连续扫码结果回调 | null |
无 |
| options.onError | function | 否 | 扫码失败回调 | null |
无 |
| options.onOverlayEvent | function | 否 | 原生遮罩事件回调(仅当 overlayConfig.enabled=true 时触发) |
null |
无 |
说明:startScan 结果流默认通过 options.onResult/options.onError 回调返回。options.onOverlayEvent 属于高级通道,需同时配置 overlayConfig.enabled=true 才会触发。
说明:不使用遮罩事件时,建议不要传 options.onOverlayEvent,可减少页面销毁后回调释放日志。
连续扫描说明
continuous=true 时,扫码界面保持打开并持续返回 onResult,适用于批量入库、流水线录入等场景。
建议:
- 业务侧对
onResult做去重或节流(插件内部会对相同码值做约900ms短窗口去重,但建议业务侧保底)。 - 在页面
onHide/onUnload中调用stopScan/destroyScanner主动释放会话。
相册识别说明(Android)
在 startScan(options) 中设置 enableAlbum=true 后,原生扫码界面右上角会显示相册按钮。
点击该按钮后会拉起系统图片选择器,识别成功后复用 startScan 的 onResult 回调返回结果。
扫码页面顶部按钮文案:
- 左上角:
关闭 - 右上角(启用相册时):
相册
pickImageAndScan(options) 会拉起系统图片选择器,用户选图后由插件原生链路解析条码/二维码。
说明:
- Android 一般无需额外存储权限(使用系统 Picker 返回授权 URI)。
- 识别成功时会触发
options.onResult,并回调options.success/complete。 - 用户取消选择时返回
9010008。 - 图片中无可识别码时返回
9010006。
示例:
import * as LizhaoScanPro from '@/uni_modules/lizhao-scan-pro'
LizhaoScanPro.pickImageAndScan({
scannerId: 'main',
formats: ['qrCode', 'code128', 'ean13'],
onResult(res) {
console.log('album scan result', res)
},
onError(err) {
console.error('album scan error', err)
}
})
Overlay 事件类型
onOverlayEvent 回调事件结构:
{
type: string,
scannerId: string,
payload: any
}
| 事件 type | payload 类型 | 说明 |
|---|---|---|
| overlayReady | string | null | 遮罩事件通道初始化完成,payload 为 overlayConfig.htmlUrl(如未配置则为 null) |
| shown | null | 原生扫码全屏界面已显示 |
| cameraReady | null | 相机预览与分析链路已绑定完成 |
| albumClick | null | 点击右上角相册按钮后触发(需 enableAlbum=true) |
| albumRecognized | string | 通过右上角相册入口识别成功,payload 为识别字符串 |
| recognized | string | 识别到码内容,payload 为识别字符串 |
| paused | null | 调用 pauseScan 后触发 |
| resumed | null | 调用 resumeScan 后触发 |
| error | string | 原生扫码过程异常,payload 为错误文本 |
| closed | null | 原生扫码界面已关闭并释放 |
| nativeMessage | any | 调用 postOverlayMessage 后回传的消息内容 |
说明:上述事件仅在 overlayConfig.enabled=true 时派发。
Overlay 事件处理示例
import * as LizhaoScanPro from '@/uni_modules/lizhao-scan-pro'
LizhaoScanPro.startScan({
scannerId: 'main',
formats: ['qrCode', 'code128'],
continuous: true,
enableAlbum: true,
showScanFrame: false,
overlayConfig: {
enabled: true
},
onResult(res) {
console.log('scan result', res)
},
onError(err) {
console.error('scan error', err)
},
onOverlayEvent(event) {
switch (event.type) {
case 'shown':
console.log('scanner shown')
break
case 'cameraReady':
console.log('camera ready')
break
case 'recognized':
console.log('recognized payload:', event.payload)
break
case 'error':
console.warn('overlay error:', event.payload)
break
case 'closed':
console.log('scanner closed')
break
case 'nativeMessage':
console.log('native message:', event.payload)
break
default:
console.log('overlay event:', event)
break
}
}
})
返回值说明(ScanFrameResult)
| 字段 | 类型 | 说明 |
|---|---|---|
| scannerId | string | 扫描器 ID |
| timestamp | number | 时间戳 |
| frameIndex | number | 帧序号 |
| results | Array |
本帧全部结果 |
错误码说明
| 错误码 | 含义 | 说明 |
|---|---|---|
| 9010001 | platform unsupported | 当前平台不支持 |
| 9010002 | camera permission denied | 相机权限不足 |
| 9010003 | album permission denied | 相册权限不足 |
| 9010004 | camera init failed | 相机流程失败 |
| 9010005 | format not supported | 格式配置不合法 |
| 9010006 | album decode failed | 相册图片识别失败(无码或解码异常) |
| 9010007 | overlay reserved | 预留错误码,当前版本不触发 |
| 9010008 | scan aborted | 扫码被中止 |
| 9010009 | invalid options | 参数不合法 |
| 9010010 | system error | 系统异常 |
权限说明
- Android:
CAMERA、FLASHLIGHT、VIBRATE(相册识别走系统 Picker,通常不需要额外存储权限) - iOS:当前版本不支持扫描实现
自定义基座说明
新增以下配置时需要自定义基座:
- Android CameraX / ML Kit 依赖
- AndroidManifest 权限
- iOS
Info.plist/PrivacyInfo.xcprivacy
本插件 Android 端严格使用自研链路(UTS + CameraX + ML Kit),不依赖 Barcode/uni-barcode-scanning 模块兜底。
如果直接使用普通调试基座运行,Android 侧可能出现 androidx.camera.* 或 com.google.android.gms.tasks.* 类缺失,表现为无法打开扫码界面。此时必须重新编译并安装自定义基座或原生安装包。
建议步骤:
- 在 HBuilderX 执行「运行 -> 运行到手机或模拟器 -> 制作自定义基座」。
- 卸载设备上旧基座后安装新基座(避免继续复用旧依赖)。
- 清理项目编译缓存后重新运行。
示例(uni-app)
import * as LizhaoScanPro from '@/uni_modules/lizhao-scan-pro'
const info = uni.getSystemInfoSync()
if (String(info.platform || '').toLowerCase() !== 'android') {
console.warn('lizhao-scan-pro 当前仅支持 Android')
return
}
LizhaoScanPro.startScan({
scannerId: 'main',
formats: ['qrCode', 'code128'],
continuous: true,
enableAlbum: true,
onResult(res) {
console.log(res.results)
},
onError(err) {
console.error(err)
}
})
页面生命周期建议
onHide() {
LizhaoScanPro.stopScan({ scannerId: 'main' })
}
onUnload() {
LizhaoScanPro.destroyScanner({ scannerId: 'main' })
}
示例(uni-app x)
import * as LizhaoScanPro from '@/uni_modules/lizhao-scan-pro'
const info = uni.getSystemInfoSync()
if (String(info.platform || '').toLowerCase() !== 'android') {
console.warn('lizhao-scan-pro 当前仅支持 Android')
return
}
LizhaoScanPro.setTorchEnabled({ scannerId: 'main', enabled: true })
LizhaoScanPro.setZoomRatio({ scannerId: 'main', zoomRatio: 1.8 })
发布前自检清单
- 确认插件仅通过
@/uni_modules/lizhao-scan-proAPI 入口调用。 - 确认未使用
<lizhao-scan-pro />模板标签或common/*.js旧入口。 - 确认 Android 自定义基座已重建并重装(含 CameraX + ML Kit 依赖)。
- 确认扫码页在 Android 真机可拉起全屏原生界面并返回结果。
- 确认 iOS/Harmony/Web/小程序路径返回
9010001且文档说明一致。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6481
赞赏 5
下载 11652872
赞赏 1892
赞赏
京公网安备:11010802035340号