Android 13下Flutter camera插件空指针异常问题求助
Android 13下camera插件空指针问题解决
问题分析
你遇到的CameraException是因为Android 13的媒体编码配置获取逻辑变更,旧版本camera插件在获取EncoderProfiles$VideoProfile时返回了null,导致调用getWidth()触发空指针异常。
解决方案
1. 升级camera插件到最新稳定版
官方后续版本已经修复了Android 13的适配问题,直接升级是最便捷的解决方式:
- 修改
pubspec.yaml中的camera依赖,指定最新稳定版本(比如camera: ^0.10.5+3,以实际最新版为准) - 执行
flutter pub get更新依赖
2. 手动适配(无法升级插件时)
如果暂时无法升级插件,可以通过以下方式规避:
- 指定明确的分辨率:初始化
CameraController时,手动传入设备支持的分辨率参数,避免插件自动获取可能为空的编码配置 - Android端代码修改:自定义相机初始化逻辑,在获取
EncoderProfiles时增加非空判断,当配置为空时使用预设的默认分辨率
3. 检查权限配置
确认AndroidManifest.xml中已正确声明权限,并在运行时完成申请:
- 相机基础权限:
CAMERA - 若涉及视频录制,还需
RECORD_AUDIO - Android 13需额外确认
POST_NOTIFICATIONS权限是否正常授予(部分场景下权限缺失会间接影响媒体配置获取)
错误日志
E/flutter (14764): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: CameraException(error, Attempt to invoke virtual method 'int android.media.EncoderProfiles$VideoProfile.getWidth()' on a null object reference) E/flutter (14764): #0 AndroidCamera.createCamera (package:camera_android/src/android_camera.dart:112:7) E/flutter (14764): <asynchronous suspension> E/flutter (14764): #1 CameraController.initialize (package:camera/src/camera_controller.dart:291:19) E/flutter (14764): <asynchronous suspension>
内容的提问来源于stack exchange,提问作者sumit_patel
相关产品推荐
相关产品推荐

