更新记录
1.1.0(2026-09-18)
功能
- 内置全屏原生扫码页:无扫码框,带关闭、提示、手电筒和绿色扫描动画
- 支持双指缩放
- 同屏多个二维码时暂停扫描,点选其中一个后再返回结果;只有一个码时自动返回
- Android 改为 Camera2 取帧,避免与基座自带的 CameraX 版本冲突
- Android 在 ML Kit 未识别时,用 ZXing 做全图、反色、中心裁切和对比度拉伸
- iOS 同时使用 Vision 与系统扫码接口
调整
- 未传
formats时默认只识别二维码 - 不依赖 CameraX,请使用自定义调试基座或云打包后真机验证
平台兼容性
uni-app(5.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.0)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
mlkit-scancode
App 端全屏扫码插件。Android 使用 Camera2 取帧,再用 ML Kit 识别,识别不到时用 ZXing 补一次。iOS 使用 AVFoundation,同时走 Vision 和系统扫码接口。
页面没有扫码框。只有一个二维码时自动返回;同屏多个二维码时先点选,再返回选中的内容。
平台支持
| 平台 | 实现方式 | 最低版本 |
|---|---|---|
| App-Android | Camera2 + ML Kit + ZXing | Android 5.0(API 21) |
| App-iOS | AVFoundation + Vision + 系统扫码 | iOS 12.0 |
本插件只支持 App。Web、小程序请继续使用 uni.scanCode。
不要在插件里再引入 CameraX。基座的 Camera、Barcode 模块已经带有一套 CameraX,版本更高时会在打开扫码页时崩溃。
安装
插件在项目内,从 @/uni_modules/mlkit-scancode 导入。
修改原生代码后,必须重新打自定义调试基座或云打包。标准基座不会加载这里的原生实现。
首次扫码会申请相机权限。Android 需要 CAMERA,iOS 需要在 manifest.json 中配置 NSCameraUsageDescription。
使用
import { startScan } from '@/uni_modules/mlkit-scancode'
startScan({
tip: '将二维码对准屏幕,即可自动扫描',
formats: ['QR_CODE'],
vibrate: true,
success: (res) => {
console.log('扫码结果:', res.result, res.format)
},
fail: (err) => {
console.error('扫码失败:', err.errCode, err.errMsg)
},
complete: (res) => {
console.log('扫码操作完成')
},
})
业务入口可以走 src/utils/openScanCode.js。它在 App 端调用本插件,其他端回退 uni.scanCode,返回值仍是扫码文本。
API
startScan(options)
StartScanOptions
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| tip | string | 否 | 将二维码对准屏幕,即可自动扫描 | 扫码页提示文案 |
| formats | string[] | 否 | ['QR_CODE'] |
识别格式。不传只认二维码 |
| vibrate | boolean | 否 | true | 成功后是否震动 |
| success | (res) => void | 否 | - | 成功回调。多个码时,回调的是用户点选的那一个 |
| fail | (err) => void | 否 | - | 失败回调 |
| complete | (res) => void | 否 | - | 成功或失败都会触发 |
ScanSuccess
| 字段 | 类型 | 说明 |
|---|---|---|
| result | string | 扫码内容 |
| format | string | 格式,例如 QR_CODE |
| errMsg | string | startScan:ok |
错误码
| 错误码 | 说明 |
|---|---|
| 9010001 | 无法打开扫码页 |
| 9010002 | 相机权限被拒绝 |
| 9010003 | 用户取消 |
| 9010004 | 没有识别到内容 |
取消不要当成无效二维码提示。openScanCode.js 用 isScanCanceled 判断 9010003。
目录
uni_modules/mlkit-scancode/
├── package.json
├── readme.md
├── changelog.md
└── utssdk/
├── interface.uts
├── unierror.uts
├── app-android/
└── app-ios/
许可
MIT

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