uniapp - 扫码功能

Marimo_z
2025-04-02 / 0 评论 / 4 阅读 / 正在检测是否收录...

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>

平台差异说明

AppH5微信小程序支付宝小程序百度小程序抖音小程序、飞书小程序QQ小程序快手小程序京东小程序元服务
x

HarmonyOS Next 兼容性

HarmonyOS Next
HBuilderX 4.23

OBJECT 参数说明

参数名类型必填说明平台差异说明
onlyFromCameraBoolean是否只能从相机扫码,不允许从相册选择图片抖音小程序、百度小程序、支付宝小程序不支持此参数
scanTypeArray扫码类型,参考下方scanType的合法值抖音小程序不支持此参数
autoDecodeCharsetBoolean是否启用自动识别字符编码功能,默认为否App
autoZoomBoolean是否启用自动放大,默认启用仅 App-Android (3.5.4+) 支持
barCodeInputBoolean是否支持手动输入条形码仅飞书小程序(V3.14.0)支持
hideAlbumBoolean是否隐藏相册(不允许从相册选择图片),只能从相机扫码。默认值为 false。仅支付宝小程序支持
successFunction接口调用成功的回调,返回内容详见返回参数说明。
failFunction接口调用失败的回调函数(识别失败、用户取消等情况下触发)
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

scanType的合法值

说明
barCode一维码
qrCode二维码
datamatrixData Matrix 码
pdf417PDF417 条码

success 返回参数说明

参数说明平台差异说明
result所扫码的内容
scanType所扫码的类型App、微信小程序、百度小程序、QQ小程序、京东小程序、支付宝小程序
charSet所扫码的字符集App、微信小程序、百度小程序(所扫码的字符集,仅支持 Android 系统)、QQ小程序、京东小程序
path当所扫的码为当前应用的合法二维码时,会返回此字段,内容为二维码携带的 path。微信小程序、QQ小程序、京东小程序
rawData原始数据,base64 编码微信小程序、QQ小程序、京东小程序、支付宝小程序
code扫码所得数据支付宝小程序
qrCode扫描二维码时返回二维码数据支付宝小程序
barCode扫描条形码时返回条形码数据支付宝小程序
imageChannel来源支付宝小程序

二、h5(扫码功能插件)

  1. 导入插件(两种方式)

    (1)HBuilder 创建的项目:从应用市场导入 mumu-getQrcode 到uniapp项目中

(2)脚手架创建的 uni 的项目:需要自行安装 jsQR 依赖,并且修改组件中源码中的引入。

# 安装 jsQR
npm install jsqr --save

# 修改组件源码对 jsQR 依赖
import jsQR from "jsqr"
  1. 新建页面 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>
  1. 在需要调用扫码功能的页面进行 页面跳转

    uni.navigateTo({
        url: '/pages/scan-qrcode/scan-qrcode'
    });
  1. 相关API

    可传属性(Props)
    参数说明类型默认值
    continue是否连续获取。false 监听一次 true 持续监听Booleanfalse
    exact选调用摄像头。environment 后摄像头 user 前摄像头Stringenvironment
    size扫码屏幕大小。whole 全屏 balf 半屏Stringwhole
    definition调用摄像头清晰度。fasle 正常 true 高清Booleanfalse
    事件(Events)
    事件名说明回调参数
    success检测到图中有二维码并读取到数据是回调二维码数据
    error组件内部发送错误,通常是摄像头没有调用成功错误信息,详情见下

    常见的错误信息:

    • AbortError[中止错误]

      尽管用户和操作系统都授予了访问设备硬件的权利,而且未出现可能抛出NotReadableError异常的硬件问题,但仍然有一些问题的出现导致了设备无法被使用。

    • NotAllowedError[拒绝错误]

      用户拒绝了当前的浏览器实例的访问请求;或者用户拒绝了当前会话的访问;或者用户在全局范围内拒绝了所有媒体访问请求。

    • NotFoundError[找不到错误]

      找不到满足请求参数的媒体类型。

    • NotReadableError[无法读取错误]

      尽管用户已经授权使用相应的设备,操作系统上某个硬件、浏览器或者网页层面发生的错误导致设备无法被访问。

    • OverconstrainedError[无法满足要求错误]

      指定的要求无法被设备满足,此异常是一个类型为OverconstrainedError的对象,拥有一个constraint属性,这个属性包含了当前无法被满足的constraint对象,还拥有一个message属性,包含了阅读友好的字符串用来说明情况。

    • SecurityError[安全错误]

      getUserMedia() 被调用的 Document 上面,使用设备媒体被禁止。这个机制是否开启或者关闭取决于单个用户的偏好设置。

    • TypeError[类型错误]

      constraints 对象未设置[空],或者都被设置为false

    插槽 (slot)
    插槽名称说明默认值
    error当发送错误时,在页面上显示的内容相机权限被拒绝提示
1

评论 (0)

取消