uniapp - 扫码功能
一、微信小程序,APP (原生扫码功能)
官方文档:uni.scanCode(OBJECT)
<!-- 在 'manifest.json' 中允许打开摄像头权限 -->
<template>
<button @click="scanQRcodes">扫码</button>
</template>
<script setup>
// 扫码
const scanQRcodes = () => {
uni.scanCode({
// 修改 OBJECT 参数
onlyFromCamera: false,
// success 返回参数
success: (res) => {
if (res.result) {
console.log('扫描结果:', res.result);
} else {
uni.showToast({
title: '扫描失败',
icon: 'none'
});
}
},
fail: (err) => {
if (err.errMsg.includes('cancel')) {
uni.showToast({
title: '扫描已取消',
icon: 'none'
});
} else {
uni.showToast({
title: '调用相机失败',
icon: 'none'
});
}
}
});
};
</script>
平台差异说明
App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 抖音小程序、飞书小程序 | QQ小程序 | 快手小程序 | 京东小程序 | 元服务 |
---|---|---|---|---|---|---|---|---|---|
√ | x | √ | √ | √ | √ | √ | √ | √ | √ |
HarmonyOS Next 兼容性
HarmonyOS Next |
---|
HBuilderX 4.23 |
OBJECT 参数说明
参数名 | 类型 | 必填 | 说明 | 平台差异说明 |
---|---|---|---|---|
onlyFromCamera | Boolean | 否 | 是否只能从相机扫码,不允许从相册选择图片 | 抖音小程序、百度小程序、支付宝小程序不支持此参数 |
scanType | Array | 否 | 扫码类型,参考下方scanType的合法值 | 抖音小程序不支持此参数 |
autoDecodeCharset | Boolean | 否 | 是否启用自动识别字符编码功能,默认为否 | App |
autoZoom | Boolean | 否 | 是否启用自动放大,默认启用 | 仅 App-Android (3.5.4+) 支持 |
barCodeInput | Boolean | 否 | 是否支持手动输入条形码 | 仅飞书小程序(V3.14.0)支持 |
hideAlbum | Boolean | 否 | 是否隐藏相册(不允许从相册选择图片),只能从相机扫码。默认值为 false。 | 仅支付宝小程序支持 |
success | Function | 否 | 接口调用成功的回调,返回内容详见返回参数说明。 | |
fail | Function | 否 | 接口调用失败的回调函数(识别失败、用户取消等情况下触发) | |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
scanType的合法值
值 | 说明 |
---|---|
barCode | 一维码 |
qrCode | 二维码 |
datamatrix | Data Matrix 码 |
pdf417 | PDF417 条码 |
success 返回参数说明
参数 | 说明 | 平台差异说明 |
---|---|---|
result | 所扫码的内容 | |
scanType | 所扫码的类型 | App、微信小程序、百度小程序、QQ小程序、京东小程序、支付宝小程序 |
charSet | 所扫码的字符集 | App、微信小程序、百度小程序(所扫码的字符集,仅支持 Android 系统)、QQ小程序、京东小程序 |
path | 当所扫的码为当前应用的合法二维码时,会返回此字段,内容为二维码携带的 path。 | 微信小程序、QQ小程序、京东小程序 |
rawData | 原始数据,base64 编码 | 微信小程序、QQ小程序、京东小程序、支付宝小程序 |
code | 扫码所得数据 | 支付宝小程序 |
qrCode | 扫描二维码时返回二维码数据 | 支付宝小程序 |
barCode | 扫描条形码时返回条形码数据 | 支付宝小程序 |
imageChannel | 来源 | 支付宝小程序 |
二、h5(扫码功能插件)
导入插件(两种方式)
(1)HBuilder 创建的项目:从应用市场导入 mumu-getQrcode 到uniapp项目中
(2)脚手架创建的 uni 的项目:需要自行安装 jsQR
依赖,并且修改组件中源码中的引入。
# 安装 jsQR
npm install jsqr --save
# 修改组件源码对 jsQR 依赖
import jsQR from "jsqr"
新建页面 scan-qrcode,作为扫码页面。
<template> <view class="container"> <mumu-get-qrcode @success='qrcodeSucess' @error="qrcodeError"></mumu-get-qrcode> </view> </template> <script> import mumuGetQrcode from '@/uni_modules/mumu-getQrcode/components/mumu-getQrcode/mumu-getQrcode.vue' export default { components: { mumuGetQrcode //注册 }, data() { return { } }, name: 'Qrcode', methods: { qrcodeSucess(data) { //摄像头扫码成功后返回 console.log(data) uni.showModal({ title: '成功', content: data, success: () => {} }) }, qrcodeError(err) { //摄像头扫码失败返回 uni.showModal({ title: '摄像头授权失败', content: '摄像头授权失败,请检测当前浏览器是否有摄像头权限。', success: () => { uni.navigateBack({}) //返回到上一页 } }) } } }; </script>
在需要调用扫码功能的页面进行 页面跳转
uni.navigateTo({ url: '/pages/scan-qrcode/scan-qrcode' });
相关API
可传属性(Props)
参数 说明 类型 默认值 continue 是否连续获取。false 监听一次 true 持续监听 Boolean false exact 选调用摄像头。environment 后摄像头 user 前摄像头 String environment size 扫码屏幕大小。whole 全屏 balf 半屏 String whole definition 调用摄像头清晰度。fasle 正常 true 高清 Boolean false 事件(Events)
事件名 说明 回调参数 success 检测到图中有二维码并读取到数据是回调 二维码数据 error 组件内部发送错误,通常是摄像头没有调用成功 错误信息,详情见下 常见的错误信息:
AbortError
[中止错误]尽管用户和操作系统都授予了访问设备硬件的权利,而且未出现可能抛出
NotReadableError
异常的硬件问题,但仍然有一些问题的出现导致了设备无法被使用。NotAllowedError
[拒绝错误]用户拒绝了当前的浏览器实例的访问请求;或者用户拒绝了当前会话的访问;或者用户在全局范围内拒绝了所有媒体访问请求。
NotFoundError
[找不到错误]找不到满足请求参数的媒体类型。
NotReadableError
[无法读取错误]尽管用户已经授权使用相应的设备,操作系统上某个硬件、浏览器或者网页层面发生的错误导致设备无法被访问。
OverconstrainedError
[无法满足要求错误]指定的要求无法被设备满足,此异常是一个类型为
OverconstrainedError
的对象,拥有一个constraint
属性,这个属性包含了当前无法被满足的constraint
对象,还拥有一个message
属性,包含了阅读友好的字符串用来说明情况。SecurityError
[安全错误]在
getUserMedia()
被调用的Document
上面,使用设备媒体被禁止。这个机制是否开启或者关闭取决于单个用户的偏好设置。TypeError
[类型错误]constraints 对象未设置[空],或者都被设置为
false
。
插槽 (slot)
插槽名称 说明 默认值 error 当发送错误时,在页面上显示的内容 相机权限被拒绝提示
评论 (0)