使用com.google.android.gms.vision的CameraSource在Redmi Note 12拍照返回黑图求助
解决Redmi Note 12上CameraSource拍照返回黑图的问题
以下是针对该设备专属问题的具体调整方案:
检查并确认相机权限配置
Redmi设备的MIUI系统对权限管控较严格,需确保已正确申请并获取相机权限:- 在
AndroidManifest.xml中声明权限:<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> - Android 6.0及以上版本需动态申请权限,且确保用户已授予相机权限。
- 在
指定兼容的预览与拍照尺寸
Redmi Note 12的相机可能不支持CameraSource默认尺寸,需手动设置设备兼容的参数:- 获取相机支持的输出尺寸列表:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String cameraId = manager.getCameraIdList()[0]; CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); Size[] outputSizes = map.getOutputSizes(ImageFormat.JPEG); - 选择与设备屏幕分辨率接近的尺寸,配置到CameraSource:
CameraSource cameraSource = new CameraSource.Builder(context, detector) .setRequestedPreviewSize(1920, 1080) // 替换为获取到的兼容尺寸 .setRequestedFps(30.0f) .setAutoFocusEnabled(true) .build();
- 获取相机支持的输出尺寸列表:
修正图像旋转与方向适配
MIUI的相机方向逻辑与原生系统有差异,拍照后需对图像做旋转处理:private Bitmap adjustImageRotation(Bitmap bitmap, int rotationDegree) { Matrix matrix = new Matrix(); matrix.postRotate(rotationDegree); return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); }可通过
CameraCharacteristics获取相机硬件旋转角度,结合当前屏幕方向计算最终需要旋转的度数。强制使用Camera2 API
旧版Camera API在MIUI上可能存在兼容性问题,可强制CameraSource使用Camera2:
在AndroidManifest.xml中添加元数据:<meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="camera2" />同时确保
play-services-vision依赖版本在19.0.0及以上。关闭MIUI专属相机优化
进入Redmi Note 12的「设置」→「应用设置」→ 找到你的应用 →「权限管理」→「相机」,关闭“优化相机使用”类选项;同时在应用信息中关闭省电模式对相机的限制。
内容的提问来源于stack exchange,提问作者CongCuong
相关产品推荐
相关产品推荐

