React-native-camera 显示为黑屏

React-native-camera appears as black screen

我正在尝试为我的应用程序实施 eKYC,其中包括 3 个摄像头屏幕(2 个带有背面摄像头的屏幕,1 个带有正面摄像头的屏幕)

在某些 Android 设备上(三星 Note 8、小米红米 Pro 8、Vsmart Joy 3、...),第三个屏幕的摄像头(前置摄像头)不工作(黑屏)。

我试图从 Android logcat 中读取错误,但收到此错误:

2021-01-11 12:29:00.704 3973-13086/com.******.vn W/CameraBase: An error occurred while connecting to camera 1: Status(-8): '8: connectHelper:1648: Too many cameras already open, cannot open camera "1"'

我尝试过的方法:使用 NavigationEventswithNavigationFocus 在当前屏幕聚焦时渲染相机

const [isFocus, setFocus] = useState<boolean>(false)
<NavigationEvents onWillFocus={onFocus} onWillBlur={onBlur}></NavigationEvents>
{isFocus && props.isFocused && (
    <RNCamera
      ref={refCamera}
      style={styles.preview}
      type={RNCamera.Constants.Type.front}
      captureAudio={false}
      onCameraReady={() => console.log('oncameraready')}
      onFacesDetected={onFaceDetected}>
      <View style={styles.progressBarContainer}>
        <Progress.Bar
          color={Colors.asEastOcean}
          progress={progress}
          width={200}
          style={styles.progressBar}
          borderColor={Colors.white}
          unfilledColor={Colors.white}
        />
      </View>
    </RNCamera>
  )}

但是第三屏的摄像头(前置摄像头)还是不行。其他两个工作完美。 有什么办法可以解决这个问题,在此先感谢您!

注意:如果我改变顺序,先渲染第三屏,前置摄像头是正常工作的。

我找到了解决问题的方法: 在 react-native-camera 的以下文件中: android/src/main/java/com/google/android/cameraview/Camera1.java

我修改了 pausePreview 函数如下:

    @Override
    public void pausePreview() {
        synchronized(this){
            mIsPreviewActive = false;
            mShowingPreview = false;

            if(mCamera != null){
                mCamera.stopPreview();
            }
            releaseCamera();
        }
    }

如果我有两个连续的屏幕使用 RNCamrera 组件,我使用 navigation.replace() 而不是 navigation.navigate()