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

React Native Vision Camera条码扫描器安卓端崩溃问题求助

解决vision-camera-code-scanner安卓端多错误问题

1. "Access denied finding property 'vendor.camera.aux.packagelist'" 警告

这是安卓系统相机服务的权限限制警告,属于非致命系统日志,不会影响条码扫描功能,无需处理,可直接忽略。

2. "Expected to run on UI thread!" 断言异常

vision-camera的核心操作(扫描器初始化、结果回调)必须在UI线程执行,按以下方式修复:

  • 延迟扫描器初始化:在Camera组件的onInitialized回调中执行扫描器创建逻辑,确保在UI线程触发。
  • 回调处理限制:扫描结果的处理代码(如更新UI、调用RN API)必须放在UI线程,避免在后台线程执行。

3. 空指针解引用崩溃

空指针通常是扫描器未初始化或相机未就绪时调用扫描方法导致,解决方案:

  • 绑定相机就绪状态:仅在Camera的onInitialized回调完成后,才初始化扫描器并启动扫描。
  • 添加空值校验:调用扫描器的startScan/stopScan方法前,先判断扫描器实例是否非空。
  • 版本兼容:确保vision-camera与vision-camera-code-scanner使用匹配的稳定版本,避免因版本不兼容导致的空指针问题。

JS层示例代码

import { Camera } from 'react-native-vision-camera';
import { CodeScanner } from 'vision-camera-code-scanner';
import { useRef } from 'react';

function ScannerScreen() {
  const cameraRef = useRef(null);
  const scannerRef = useRef(null);

  const handleCameraReady = async () => {
    // 相机就绪后初始化扫描器
    scannerRef.current = await CodeScanner.create({
      codeTypes: ['qr', 'ean-13'],
    });
    // 启动扫描并处理结果
    scannerRef.current.startScan((scannedCodes) => {
      // 此处逻辑自动在UI线程执行
      console.log('扫描结果:', scannedCodes);
    });
  };

  return (
    <Camera
      ref={cameraRef}
      onInitialized={handleCameraReady}
      style={{ flex: 1 }}
      device={/* 已选择的相机设备 */}
      isActive={true}
    />
  );
}

安卓原生代码注意事项(自定义模块场景)

若涉及自定义安卓逻辑,所有与扫描器、相机交互的代码需通过UI线程执行:

runOnUiThread(() -> {
  // 初始化扫描器或处理扫描结果的逻辑
});

内容的提问来源于stack exchange,提问作者Vidurajith Darshana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:10:25