集成react-native-vision-camera安卓端报错[session/camera-not-ready]求助
解决react-native-vision-camera Android端
[session/camera-not-ready]错误 问题根源
这个错误的核心是Android相机组件初始化未完成就被激活——即使权限已通过,Android端相机硬件的初始化流程比iOS慢,直接设置isActive={true}会触发该报错。你的代码存在两个关键问题:
- 权限状态判断逻辑错误:
Camera.getCameraPermissionStatus()返回的是权限枚举值(如'granted'),不是布尔值,直接赋值给cameraPerm会导致权限判断失效,可能在权限未真正授予时就渲染相机。 - 相机激活时机过早:未等待相机完成初始化就启动,忽略了Android端的初始化延迟。
修复步骤
1. 修正权限状态判断逻辑
修改checkPermissions函数,正确识别权限授予状态:
const checkPermissions = async () => { await Camera.requestCameraPermission(); await Camera.requestMicrophonePermission(); await requestPermission(); const cameraPermissionStatus = await Camera.getCameraPermissionStatus(); // 明确判断权限是否为授予状态 setCameraPerm(cameraPermissionStatus === 'granted'); const microphonePermissionStatus = await Camera.getMicrophonePermissionStatus(); };
2. 监听相机初始化回调,控制激活时机
添加状态变量跟踪相机初始化状态,通过onInitialized回调确认相机就绪后再激活:
// 新增状态:标记相机是否完成初始化 const [isCameraInitialized, setIsCameraInitialized] = useState(false); // 修改Camera组件配置 <Camera style={StyleSheet.absoluteFill} device={device} // 仅当权限通过且相机初始化完成时激活 isActive={cameraPerm && isCameraInitialized} video={true} audio={true} ref={camera} // 相机初始化完成后触发该回调 onInitialized={() => setIsCameraInitialized(true)} />
3. 优化渲染流程,添加初始化等待状态
在renderCameraScreen中补充初始化等待逻辑,避免用户看到空白或错误:
if (!cameraPerm){ return( <View> <Text style={{...FONTS.Title, textAlign: 'center', marginTop: 100}}> 请在设置中启用视频权限以访问相机 </Text> </View> ) } // 相机初始化完成前显示加载提示 if (!isCameraInitialized) { return ( <View style={{backgroundColor: 'black', justifyContent: 'center', alignItems: 'center', height: maxHeight * 0.70}}> <Text style={{color: 'white'}}>相机加载中...</Text> </View> ); }
关于onInitialized()的说明
onInitialized是react-native-vision-camera提供的相机生命周期回调,当相机硬件完成初始化、会话配置成功后会自动触发。你需要将其作为Camera组件的props传入,用来确认相机已准备就绪,此时再开启isActive就能彻底避免camera-not-ready错误。
内容的提问来源于stack exchange,提问作者user18899735
相关产品推荐
相关产品推荐

