从expoBarcodeScanner切换到expo CameraView时,扫码功能停止工作。 CameraView 正确打开,确实授予了权限,但在尝试扫描任何代码时,没有任何反应,handleBarCodeScanned 未命中。
相机视图模式:
<Modal
visible={modalVisible}
transparent={false}
animationType="slide"
>
<View style={styles.modalContainer}>
<CameraView
style={{ width:'100%', height:'100%' }}
barcodeScannerEnabled
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
barcodeScannerSettings={{
barcodeTypes: ["ean13"],
}}
/>
<TouchableOpacity style={styles.closeButton} onPress={() => setModalVisible(false)}>
<Text style={styles.closeButtonText}>Close Scanner</Text>
</TouchableOpacity>
</View>
</Modal>
处理:
const handleBarCodeScanned = ({ type, data }) => {
console.log('hitted');
setScanned(true);
setModalVisible(false);
Alert.alert(`Bar code type ${type} -> ${data}`);
};
以及具有权限的工作部分:
const openScanner = async () => {
console.log(cameraPermission?.status);
if (cameraPermission?.status !== PermissionStatus.GRANTED) {
const { granted } = await requestCameraPermission();
if (!granted) {
Alert.alert('Camera permission is required to use the barcode scanner.');
return;
}
}
setScanned(false);
setModalVisible(true);
};
这实际上是一个错字。 之前:
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
之后:
onBarcodeScanned={scanned ? undefined : handleBarcodeScanned}