uni-app二维码扫码没有scanType类型

发布于 1周前 作者 vueper 来自 Uni-App

uni-app二维码扫码没有scanType类型

问题描述

一个app显示二维码,将二维码截图后转到另一个app进行扫码。扫的二维码没有scanType,直接扫描截图或是将截图上传到某个软件后再下载到本机,此时通过手机扫码选择相册中的二维码可以识别(以上二维码为同一个二维码,区别只在于是直接截图然后相册选中,或是通过扫一扫功能用其他手机扫描页面或相册的二维码,或二维码重新上传下载到相册再进行选取)。目前确定的问题为,直接截图并通过另一个app进入相册选中截图的二维码,扫描不出。

2 回复

不应该,请提供两张图片,图案一样但是识别结果不同。
提供 vue 和 HBuilderX 依赖版本,提供一个复现工程。提供更多信息,有助于定位和解答你的问题。


在uni-app中,uni.scanCode API 用于调用设备的扫码功能。对于二维码扫码功能,scanCode API 确实没有 scanType 类型参数,这意味着它默认支持扫描二维码(QR码)和条形码(BarCode),并且无法直接指定只扫描某一种类型的码。

不过,我们可以通过一些逻辑上的处理来尽量满足特定的扫码需求,比如过滤掉不符合条件的扫码结果。下面是一个基本的示例代码,展示如何在uni-app中实现二维码扫码功能,并在获取结果后进行简单的类型判断和处理:

// 在页面的methods中定义扫码函数
methods: {
  scanQRCode() {
    uni.scanCode({
      success: (res) => {
        console.log('扫码成功:', res);
        // 判断扫码结果类型,这里简单通过结果格式来区分
        // 通常情况下,二维码的result是一个URL或字符串,而条形码可能是一个数字序列
        if (typeof res.result === 'string' && res.result.startsWith('http') || /^[a-zA-Z0-9]+$/.test(res.result)) {
          // 根据实际业务逻辑处理扫码结果
          if (/^http/.test(res.result)) {
            // 这是一个二维码,可能是一个URL
            uni.showToast({
              title: '扫描到二维码:' + res.result,
              icon: 'success'
            });
            // 可以在这里进行URL跳转或其他处理
          } else {
            // 这是一个条形码,可能是一个数字序列
            uni.showToast({
              title: '扫描到条形码:' + res.result,
              icon: 'success'
            });
            // 可以在这里进行商品查询或其他处理
          }
        } else {
          uni.showToast({
            title: '扫描结果格式不正确',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('扫码失败:', err);
        uni.showToast({
          title: '扫码失败,请重试',
          icon: 'none'
        });
      }
    });
  }
}

// 在页面的onLoad或其他事件中调用扫码函数
onLoad() {
  // 示例:在页面加载时添加一个按钮点击事件来触发扫码
  this.$refs.scanButton.addEventListener('tap', this.scanQRCode);
}

在上面的代码中,我们通过判断 res.result 的格式来区分二维码和条形码(当然,这种方法并不是绝对准确的,因为二维码也可以包含数字序列,条形码也可能包含特定格式的字符串)。实际应用中,你可能需要根据具体的业务场景来调整扫码结果的处理逻辑。

回到顶部