Android Studio与Flutter中调用相机时设备断开连接的原因?
解决Flutter应用USB tethering连接平板拍照后丢失ADB连接的问题
可能的原因及排查步骤
1. 排查USB tethering与ADB的连接冲突
- 先关闭USB tethering,改用普通USB调试连接平板,测试拍照后是否还会断开。如果恢复正常,说明tethering占用USB通道导致ADB稳定性下降。
- 可以切换到无线ADB连接规避这个问题:
- 确保平板和电脑处于同一WiFi网络
- 在平板开发者选项中开启「无线调试」
- 在Android Studio终端执行:
adb pair <平板IP>:<配对端口>(配对信息从平板无线调试界面获取) - 接着执行
adb connect <平板IP>:<调试端口>,之后用无线ADB测试拍照功能
2. 检查照片操作的内存占用问题
- 避免直接加载原始尺寸的照片到内存,尝试拍照时就进行压缩:
final XFile? image = await ImagePicker().pickImage( source: ImageSource.camera, maxWidth: 1080, maxHeight: 1920, imageQuality: 80, ); - 用Android Studio的Profiler监控应用内存:运行程序后打开Profiler标签,跟踪拍照并添加照片时的内存变化,排查是否存在内存溢出(OOM)导致进程崩溃。
3. 确认权限配置与授予
- 检查
android/app/src/main/AndroidManifest.xml中的权限是否齐全:<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:minSdkVersion="33" /> - 手动在平板的应用设置中给应用授予相机和存储权限,再运行程序测试。
4. 重置ADB连接
- 在Android Studio终端执行以下命令重置ADB:
adb kill-server adb start-server - 重新插拔USB线,确保平板选择「文件传输」模式,而非仅充电或其他模式。
5. 定位具体代码逻辑问题
- 编写极简测试demo:只保留拍照功能,不做后续添加操作,测试是否会断开连接。如果正常,逐步添加你原来的照片处理代码,找到触发崩溃的具体逻辑。
- 如果你使用第三方相机插件(如
image_picker、camera),尝试更新到最新版本,或替换为官方推荐的插件测试。
内容的提问来源于stack exchange,提问作者psfke
相关产品推荐
相关产品推荐

