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"'
我尝试过的方法:使用 NavigationEvents
和 withNavigationFocus
在当前屏幕聚焦时渲染相机
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()
。
我正在尝试为我的应用程序实施 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"'
我尝试过的方法:使用 NavigationEvents
和 withNavigationFocus
在当前屏幕聚焦时渲染相机
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()
。