更新记录
1.0.0(2026-07-07)
- 发布统一扫码 API,覆盖 Android / iOS / HarmonyOS / Web / 微信小程序
- 支持单次扫码、持续扫码、多码识别与点选、手电筒、内容解析、扫描线样式
- App 端基于原生相机预览(Android CameraX + ML Kit,iOS AVFoundation)
- 提供 uni-app
pages/ 与 uni-app x pagesx/ 示例
平台兼容性
uni-app(5.06)
| Vue2 |
Vue2插件版本 |
Vue3 |
Vue3插件版本 |
Chrome |
Safari |
app-vue |
app-vue插件版本 |
app-nvue |
app-nvue插件版本 |
Android |
Android插件版本 |
iOS |
iOS插件版本 |
鸿蒙 |
鸿蒙插件版本 |
| √ |
1.0.0 |
√ |
1.0.0 |
- |
- |
√ |
1.0.0 |
√ |
1.0.0 |
5.0 |
1.0.0 |
12 |
1.0.0 |
5.0+ |
1.0.0 |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| - |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
uni-app x(5.06)
| Chrome |
Safari |
Android |
Android插件版本 |
iOS |
iOS插件版本 |
鸿蒙 |
鸿蒙插件版本 |
微信小程序 |
| - |
- |
5.0 |
1.0.0 |
12 |
1.0.0 |
5.0+ |
1.0.0 |
- |
其他
xview-scancode
Android / iOS / HarmonyOS / Web / 微信小程序统一扫码插件。
支持二维码、条形码、单次/持续扫码、同屏多码识别、手电筒、扫描线样式和内容类型解析。
能力
- 码制:二维码、一维码、Data Matrix、PDF417
- 模式:单次扫码、持续扫码、多码累计
- 多码:Android / iOS 预览层点选,或
outputAllCodeData 一次返回全部码(含 rect 坐标)
- 解析:
text、url、wifi、phone、sms、email、contact、geo、calendar、driverLicense、isbn、product
- 样式:
viewStyle / scanLine 直接绘制在原生相机预览页
- Web:
onlyFromCamera: false 时预览层提供「上传图片」入口
快速使用
import { parseXviewScanCode, setXviewTorch, xviewScanCode } from '@/uni_modules/xview-scancode'
// 单次扫码
xviewScanCode({
mode: 'once',
scanTypes: ['qrCode', 'barCode'],
success: (res) => console.log(res.latest)
})
// 持续扫码
xviewScanCode({
mode: 'continuous',
maxCount: 5,
autoStop: false,
success: (res) => console.log(res.codes)
})
// closeXviewScanCode() 停止
// 内容解析(不调相机)
const item = parseXviewScanCode({ rawValue: 'tel:1388********', format: 'QR_CODE' })
多码识别
预览层点选(Android / iOS):传入 multiSelectStyle,同屏 2 个及以上码时显示绿点,轻触返回对应 latest。
一次返回全部:outputAllCodeData: true,由业务页自行选择。
API
| API |
说明 |
xviewScanCode(options) |
调起扫码,回调方式 |
xviewScanCodeAsync(options) |
调起扫码,返回 Promise<XviewScanCodeResult> |
closeXviewScanCode() |
停止持续扫码 |
parseXviewScanCode(options) |
解析已有内容,不调相机 |
setXviewTorch(options) |
控制手电筒 |
getXviewScanCodePlatformInfo() |
查询当前平台能力 |
xviewScanCode / xviewScanCodeAsync options
| 参数 |
类型 |
默认值 |
说明 |
mode |
'once' \| 'continuous' |
'once' |
单次或持续扫码 |
onlyFromCamera |
boolean |
true |
是否仅相机;false 时部分平台支持相册/图片 |
scanTypes |
Array<'qrCode' \| 'barCode' \| 'datamatrix' \| 'pdf417'> |
全部 |
识别码制 |
autoDecodeCharset |
boolean |
— |
自动识别字符编码 |
autoZoom |
boolean |
— |
自动缩放 |
torch |
boolean |
— |
手电筒初始状态 |
playSound |
boolean |
— |
识别成功是否播放提示音 |
vibrate |
boolean |
— |
识别成功是否震动 |
allowMultiple |
boolean |
continuous true / once false |
是否累计多码 |
outputAllCodeData |
boolean |
false |
一次返回同帧全部码,跳过预览层点选 |
multiSelectStyle |
XviewScanMultiSelectStyle |
— |
多码预览层点选样式 |
maxCount |
number |
0 |
持续扫码最大累计数,0 不限制 |
continuousInterval |
number |
350 |
持续扫码间隔,单位 ms |
autoStop |
boolean |
once true / continuous false |
成功后是否自动停止 |
viewStyle |
XviewScanViewStyle |
— |
原生预览页样式 |
success / fail / complete |
function |
— |
仅 xviewScanCode 支持 |
viewStyle
| 参数 |
类型 |
说明 |
frameWidthRatio |
number |
取景框宽度比例,0.1–1 |
frameHeightRatio |
number |
取景框高度比例,0.1–1 |
frameBorderColor |
string |
边框颜色 |
frameBorderWidth |
number |
边框宽度,px |
frameStyle |
'border' \| 'corner' |
边框样式,默认 border |
maskColor |
string |
遮罩颜色 |
maskOpacity |
number |
遮罩透明度,0–1 |
hintText |
string |
提示文案 |
hintColor |
string |
提示文字颜色 |
hintTextSize |
number |
提示字号,px |
hintPosition |
'center' \| 'belowFrame' |
提示位置,默认 center |
showScanLine |
boolean |
是否显示扫描线 |
scanLineMode |
'line' \| 'dotGrid' \| 'fullScreen' |
扫描动画样式 |
scanLine |
XviewScanLineStyle |
扫描线样式,见下表 |
scanLine / multiSelectStyle
scanLine:
| 参数 |
类型 |
说明 |
color |
string |
颜色,支持 #RRGGBB / #AARRGGBB |
height |
number |
高度,px |
radius |
number |
圆角,px |
duration |
number |
动画时长,ms |
multiSelectStyle:
| 参数 |
类型 |
说明 |
enabled |
boolean |
是否启用预览层点选 |
promptText |
string |
底部提示文案 |
promptTextColor |
string |
提示文字颜色 |
promptTextSize |
number |
提示字号,px |
buttonColor |
string |
绿点按钮颜色 |
buttonIconColor |
string |
按钮箭头颜色 |
buttonSize |
number |
按钮直径,px |
navigationTitle |
string |
顶部标题,默认「扫码」 |
cancelText |
string |
取消按钮文案,默认「取消」 |
promptVisibleWhenSingle |
boolean |
单码时是否显示提示,默认 false |
返回值 XviewScanCodeResult
| 字段 |
类型 |
说明 |
isContinuous |
boolean |
是否持续扫码模式 |
isFinished |
boolean |
是否已达停止条件 |
codes |
Array<XviewScanCodeItem> |
累计识别结果 |
latest |
XviewScanCodeItem |
本次最新结果 |
XviewScanCodeItem 字段:rawValue、format、codeType、value、title、charSet、path、rect?
parseXviewScanCode options
| 参数 |
类型 |
必填 |
说明 |
rawValue |
string |
是 |
原始扫码内容 |
format |
XviewScanCodeFormat |
否 |
码格式,默认按 TEXT 处理 |
charSet |
string |
否 |
字符集 |
path |
string |
否 |
小程序码 path |
setXviewTorch options
| 参数 |
类型 |
必填 |
说明 |
enabled |
boolean |
是 |
true 打开,false 关闭 |
返回 XviewTorchResult:enabled、supported、message
错误码
| errCode |
说明 |
9030001 |
平台不支持 |
9030002 |
参数错误 |
9030003 |
扫码失败或取消 |
9030004 |
手电筒控制失败 |
9030005 |
当前已有扫码任务 |
9030006 |
扫码内容为空 |
示例
- uni-app:
pages/scancode/*
- uni-app x:
pagesx/scancode/*
pages.json 通过 #ifdef UNI-APP-X 分端注册