Android模拟器Camera预览黑屏问题求助(附复现代码)
问题排查与修复方案
核心问题定位
你遇到的黑屏问题直接原因是:相机生命周期绑定阶段,仅关联了ImageAnalysis条码分析组件,没有将创建好的cameraPreview预览组件绑定进去。虽然相机被成功调用(摄像头指示灯亮),但预览画面没有输出到PreviewView组件上。
分步修复方案
1. 修复相机绑定逻辑
修改processCameraProvider.bindToLifecycle方法,将cameraPreview加入绑定参数,让相机输出同时关联预览和分析组件:
// 原代码 processCameraProvider.bindToLifecycle(this, cameraSelector, imageAnalysis); // 修改后 processCameraProvider.bindToLifecycle(this, cameraSelector, cameraPreview, imageAnalysis);
2. 补全权限申请回调
当前代码未处理权限授权后的初始化逻辑,用户首次授权相机权限后,点击按钮前无法触发相机初始化。重写权限回调方法:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 0) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限通过后直接初始化相机 initBarcodeScanner(findViewById(R.id.camera_preview)); } } }
3. 适配模拟器相机映射逻辑
Android模拟器默认将本地摄像头映射为前置相机,而你代码中强制指定了后置相机,可能导致无法获取画面。可改为优先适配前置,或动态检测可用相机:
// 方案1:直接切换为前置相机 cameraSelector = new CameraSelector .Builder() .requireLensFacing(CameraSelector.LENS_FACING_FRONT) .build(); // 方案2:动态检测可用相机(更健壮) List<CameraInfo> cameraInfos = processCameraProvider.getAvailableCameraInfos(); for (CameraInfo info : cameraInfos) { if (info.hasLensFacing(CameraSelector.LENS_FACING_BACK)) { cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build(); break; } else if (info.hasLensFacing(CameraSelector.LENS_FACING_FRONT)) { cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_FRONT).build(); break; } }
4. 优化画面旋转适配
不要硬编码Surface.ROTATION_0,使用PreviewView的实际显示旋转角度,确保画面方向正确:
imageAnalysis = new ImageAnalysis .Builder() .setTargetRotation(previewView.getDisplay().getRotation()) .build();
5. 避免内存泄漏
添加Activity销毁时的线程池关闭逻辑:
// 先将cameraExecutor改为成员变量 private ExecutorService cameraExecutor; // 重写onDestroy @Override protected void onDestroy() { super.onDestroy(); if (cameraExecutor != null) { cameraExecutor.shutdown(); } }
内容的提问来源于stack exchange,提问作者user20958695
相关产品推荐
相关产品推荐

