React Native 无法设置双摄像头扫描间隔

vptzau2j  于 6个月前  发布在  React
关注(0)|答案(1)|浏览(49)

我正在开发一个React-Native应用程序。
我已经使用Expo-Camera模块成功集成了一个 * QR码扫描仪 *。但是,我在扫描过程中遇到了一个问题。当我尝试扫描QR码时,控制台快速连续显示多个代码扫描,通常在一毫秒内扫描3到5次。我想知道为什么相机同时触发多个扫描,我正在寻找一种解决方案,将其限制在每次尝试只扫描一次。
此外,如果扫描到无效代码,我实现了一个吐司通知。问题是,该通知会出现多次,对应于扫描失败的次数。此外,当扫描失败时,设备的振动功能会多次触发,也是3到5次。
我正在寻求有关如何确保QR码扫描仪只执行一次扫描尝试的指导。

  • 代码示例部分 *
const handleBarCodeScanned = async ({ typeCode, data }) => {
        console.log("NEW code scanned, Type: " + typeCode + " Data: " + data + " Time scan: " + new Date());
        ToastAndroid.show("scanned", ToastAndroid.SHORT)
    };

  return (
    <View style={styles.container}>
      <Camera
        barcodeSettings={{
            interval: 1000, // scan once per second
          }}
        style={styles.camera}
        type={type}
        onBarCodeScanned={handleBarCodeScanned}
        ratio="16:9">
      </Camera>
    </View>
  );
}

字符串

*

-  LOG  NEW code scanned, Type: 256 Data: 044922 Time scan: Tue Oct 24 2023 16:34:08 GMT+0300
-  LOG  NEW code scanned, Type: 256 Data: 044922 Time scan: Tue Oct 24 2023 16:34:08 GMT+0300
-  LOG  NEW code scanned, Type: 256 Data: 044922 Time scan: Tue Oct 24 2023 16:34:08 GMT+0300
-  LOG  NEW code scanned, Type: 256 Data: 044922 Time scan: Tue Oct 24 2023 16:34:08 GMT+0300
-  LOG  NEW code scanned, Type: 256 Data: 044922 Time scan: Tue Oct 24 2023 16:34:08 GMT+0300
-  LOG  NEW code scanned, Type: 256 Data: 044922 Time scan: Tue Oct 24 2023 16:34:08 GMT+0300

关键是代码每毫秒会被扫描几次,即使使用interval属性也无法控制

Snack example

环境

expo-env-info 1.0.5 environment info:
System:
OS: Windows 10 10.0.19045
Binaries:
Node: 18.17.1 - C:\Program Files\nodejs\node.EXE
npm: 9.6.7 - C:\Program Files\nodejs\npm.CMD
npmPackages:
expo: ^49.0.13 => 49.0.13
react: 18.2.0 => 18.2.0
react-native: 0.72.6 => 0.72.6
Expo Workflow: managed

bwntbbo3

bwntbbo31#

你可以使用state来判断是否已经扫描过某个东西。你的处理函数将包括一个if检查,看看过去是否已经扫描过某个东西,如果没有,就继续。
我现在在移动的上,但我将在几分钟内添加一个代码示例。

const [scanned, setScanned] = useState(false);
  const handleBarCodeScanned = async ({ typeCode, data }) => {
    if (scanned) {
      return
    }
    console.log("NEW code scanned");
    ToastAndroid.show("scanned", ToastAndroid.SHORT)
    setScanned(true);
    };

  return (
    <View style={styles.container}>
      <Camera
        barcodeSettings={{
            interval: 1000, // scan once per second
          }}
        style={styles.camera}
        type={type}
        onBarCodeScanned={handleBarCodeScanned}
        ratio="16:9">
      </Camera>
    </View>
  );
}

字符串

相关问题