世博相机没有显示相机看到的东西

Posted

技术标签:

【中文标题】世博相机没有显示相机看到的东西【英文标题】:Expo Camera Not Showing What Camera Sees 【发布时间】:2019-07-11 03:40:47 【问题描述】:

我正在尝试使用 Expo 的组件来创建 QRCode 扫描仪。它构建没有问题,但是当我打开它时,它会显示一个空白框,而不是相机看到的任何内容。

我尝试过使用各种条码扫描器库/包,包括此处的 BarCodeScanner:https://github.com/ideacreation/react-native-barcodescanner 以及 Expo 自己的 BarCodeScanner:https://docs.expo.io/versions/latest/sdk/bar-code-scanner/

import Camera, Permissions, BarCodeScanner  from 'expo';

import QRCode from 'react-native-qrcode';

    render() 
      return(
          <ScrollView contentContainerStyle=styles.container>
            <View style=styles.fieldBox>
            <StatusBar barStyle="dark-content" />
            <Image
              source=require('../assets/images/profile_pic.jpg')
              style=styles.profileImg/>
            <View style=styles.nameBox>
              <Text style=styles.baseText, styles.headerText>fullName</Text>
              <Text style=styles.baseText, styles.headerText>userStatus</Text>
            </View>
            <View style=styles.fieldBox>
              <Text style=styles.baseText>Bio</Text>
              <Text style=styles.baseText>bioText</Text>
            </View>
            <View style=styles.fieldBox>
            <Button
                onPress=onPressLearnMore
                title="Learn More"
                color="#841584"
                accessibilityLabel="Learn more about this purple button"
              />


             <SocialIcon
               title='Sign in with Facebook'
               button
               type='facebook'
             />
            <Button
            title="Logout"
            onPress=async () => 
                try 
                    await logout();
                
                catch (e) 
                    Alert.alert(
                        "Failed to log out",
                        e.message,
                        [ text: "Ok", onPress: () =>   ]
                    );
                    return;
                
                this.props.navigation.navigate('Login');
            
                />
            </View>
            <View style=styles.QRCode>
                <QRCode
                    value="This is a test"
                    bgColor='#000'
                    fgColor='#fff'
                />
            </View>
            <View style=styles.QRCode>

            </View>
            <View>
            this._maybeRenderAttendeeStatus()
            </View>
            </View>
            </ScrollView>
    );
  
  _maybeRenderAttendeeStatus() 
        var user_status = '';
            if(this.state.codeHasBeenScanned)
                if(this.state.isValidUser)
                    user_status = 'The person is registered';
                
                else
                    user_status = 'The person is not registered';
                
            
        if(this.state.userType == 'organizer')
            return(
                <View>
                    <Text>
                        user_status
                    </Text>
                </View>
            );
        
  

  _maybeRenderQRCodeScanner = () => 
    console.log("Determining if I should render QR code scanner");
    if (this.state.userType == 'organizer') 
      console.log("User is an organizer");
      return (
        <BarCodeScanner

                  onBarCodeRead=this._handleBarCodeRead

        />
      );
    
  

  _handleBarCodeRead = (  type, data ) => 
    this.setState(codeHasBeenScanned:true);
    console.log('barcode was recognized and scanned');
    if(true)//later need to change this to change behavior based on data
        this.setState(isValidUser:true);
    
    else
        this.setState(isValidUser:false);
    

  


我希望它有一些信息,然后是一个二维码,然后是一个显示相机所见内容的小框。然而,我得到的只是一个空白框:

Photo of what my app displays

【问题讨论】:

如何结束这个问题?我意识到我只是犯了一个错误,并没有真正在我为其分配的视图中调用函数_maybeRenderQRCodeScanner()。 【参考方案1】:

Expo 仅向用户展示您的应用构建最初的样子。它不会自动读取二维码。您必须使用另一个代码阅读器从博览会屏幕上扫描已编译的 QR 代码,以获取盒子中扫描代码的结果。

我使用“Lightning QR 扫描仪”使用您的图像扫描了您生成的代码,我想您会期望用户这样做,并得到以下结果:

希望对你有帮助

【讨论】:

嗨,Rachel,感谢您的回复,但我认为您误解了我的问题(或者,更有可能是我的问题不够清楚)。我不希望应用程序自行读取二维码;相反,您在 QR 码下方看到的框应该是可以扫描其他 QR 码的 QR 扫描仪。它是使用 react-native-barcodescanner 或 react-native-camera 之类的库生成的,因此它应该显示手机摄像头看到的任何内容(在首先请求许可之后)。但是,它目前没有显示相机应该看到的内容。

以上是关于世博相机没有显示相机看到的东西的主要内容,如果未能解决你的问题,请参考以下文章

世博会缺少相机胶卷权限

世博会相机 takePictureAsync ImageManipulator

世博会相机在 Android 设备上崩溃

世博会相机拍照崩溃的应用程序

显示启动画面或加载指示器,直到所有图像都准备好 |世博会|反应原生

世博模拟器未在设备上打开