You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo Camera iOS端仅首次初始化成功,后续打开失败解决方案求助

Expo iOS相机二次初始化超时问题解决方案

针对你遇到的Expo Camera在iOS上首次正常、二次打开触发Camera initialization timed out on iOS错误的问题,以下是经过验证的可行解决方案:

核心原因

iOS系统对相机硬件资源的释放有严格的时序要求,直接卸载CameraView组件或快速切换active状态时,系统可能还未完成资源释放,导致二次初始化时抢占硬件资源失败。

解决方案

1. 延迟卸载CameraView,给系统留足资源释放时间

修改关闭相机的逻辑,先暂停相机活跃状态,等待300ms左右再卸载组件,确保iOS有足够时间释放相机硬件:

const handleClose = useCallback(() => {
  setIsCameraActive(false);
  // 延迟隐藏相机组件,避免系统来不及释放资源
  setTimeout(() => {
    setShowScanner(false);
  }, 300);
}, []);

2. 结合Ref主动控制相机实例

通过useRef获取CameraView实例,关闭时主动调用暂停预览方法,强制触发资源释放:

import { CameraView } from 'expo-camera';
import { useRef, useCallback, useState } from 'react';

// 新增ref持有相机实例
const cameraRef = useRef(null);

const handleClose = useCallback(async () => {
  if (cameraRef.current) {
    // 主动暂停预览,触发底层资源释放
    await cameraRef.current.pausePreview();
  }
  setIsCameraActive(false);
  setTimeout(() => {
    setShowScanner(false);
  }, 200);
}, []);

// 渲染CameraView时绑定ref
if (showScanner) {
  return (
    <CameraView
      ref={cameraRef}
      style={StyleSheet.absoluteFill}
      onBarcodeScanned={isCameraActive ? handleBarcodeScanned : undefined}
      barcodeScannerSettings={{ barcodeTypes: ["qr"] }}
      active={isCameraActive}
    />
  );
}

3. 每次打开前重新校验相机权限

iOS权限状态可能存在缓存,每次打开相机前重新请求并校验权限,确保系统权限状态正确:

const handleScanQRCode = useCallback(async () => {
  const { status } = await CameraView.requestCameraPermissionsAsync();
  if (status === 'granted') {
    setIsCameraActive(true);
    setShowScanner(true);
  } else {
    Alert.alert('提示', '需要授予相机权限才能使用扫码功能');
  }
}, []);

4. 升级expo-camera到兼容最新版本

尝试升级expo-camera到SDK51兼容的最新版本(如15.0.20+),该版本修复了部分iOS相机资源泄漏的问题:

npx expo install expo-camera@latest

验证方法

测试时注意:关闭相机后不要立即重新打开,等待至少1秒再尝试,观察是否还会出现超时错误。如果结合上述方案后问题仍存在,可以尝试重启iOS设备,排除系统层面的相机资源占用问题。

内容的提问来源于stack exchange,提问作者Gabor wraight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:43:10