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

运行Android Things的树莓派使用Android Camera(1) API无法连接相机

解决Android Things 0.7树莓派上二维码扫描崩溃的问题

针对你遇到的这个问题,结合Android Things早期版本的特性和树莓派Camera V2的适配情况,我整理了几个大概率的原因和对应的解决办法:

1. 相机朝向的适配问题

树莓派Camera V2在Android Things 0.7中被识别为前置相机(facing=1),但绝大多数二维码扫描库默认会优先调用后置相机。当扫描库按照后置相机的逻辑去初始化配置时,就会因为实际相机的属性不匹配而崩溃。

解决办法:

  • 修改扫描代码,强制指定使用检测到的唯一相机(ID为0,因为Camera.getNumberOfCameras()返回1),而不是依赖库的默认后置相机选择逻辑。比如在初始化扫描器时,显式传入相机ID参数:
    // 示例:强制使用ID为0的相机
    Camera camera = Camera.open(0);
    
  • 如果使用的是ZXing等封装好的扫描库,可以找到库中相机选择的代码,把默认的后置相机判断逻辑改为直接使用第一个检测到的相机。

2. Android Things 0.7的相机API参数限制

Android Things 0.7属于早期版本,对标准Android Camera API的支持有局限性,很多手机上支持的相机参数(比如预览尺寸、像素格式)在树莓派上可能不兼容,扫描库如果强行设置这些参数就会触发崩溃。

解决办法:

  • 先获取树莓派Camera V2支持的预览尺寸,再给扫描库设置对应的参数:
    Camera.Parameters params = camera.getParameters();
    List<Camera.Size> supportedSizes = params.getSupportedPreviewSizes();
    // 选择一个合适的尺寸,比如优先选接近屏幕比例的
    Camera.Size targetSize = supportedSizes.get(0);
    params.setPreviewSize(targetSize.width, targetSize.height);
    camera.setParameters(params);
    
  • 避免使用过于特殊的预览格式,尽量选择ImageFormat.NV21这类通用格式。

3. 预览控件的兼容性问题

树莓派的显示输出和手机端差异较大,扫描库自带的SurfaceView或TextureView可能在Android Things上无法正常创建预览Surface,进而导致相机初始化失败崩溃。

解决办法:

  • 尝试将扫描布局中的SurfaceView替换为TextureView,TextureView在嵌入式设备上的兼容性通常更好;
  • 确保预览控件的布局参数设置合理,不要设置超出屏幕范围的尺寸,避免因为布局异常导致预览初始化失败。

4. 权限的二次确认

虽然你的应用能正常加载登录,但还是要确认相机权限是否完全生效:

  • 检查AndroidManifest.xml中是否声明了相机权限:
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera"/>
    
  • 如果应用的目标SDK是23及以上,即使是Android Things设备,也建议在进入扫码页时动态申请一次相机权限,避免权限未正确授予导致的崩溃。

关键调试步骤

如果上面的方法还没解决问题,一定要抓取崩溃日志定位具体原因:

  • 连接树莓派后执行adb logcat *:E命令,过滤错误日志,找到崩溃的堆栈信息,比如是Camera.open()抛出异常,还是参数设置失败,或者是预览启动时的错误,根据具体日志再针对性修复。

内容的提问来源于stack exchange,提问作者Luke Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:26:11