如果在Android相机2中预览未显示,可能是由于以下几个原因:
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
boolean isCameraAvailable = cameraManager.getCameraIdList().length > 0;
SurfaceView surfaceView = findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 初始化相机并开始预览
openCamera();
startPreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// 相机预览尺寸发生变化时调用
// 可以在此重新设置相机预览尺寸
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 停止相机预览并释放相机资源
stopPreview();
releaseCamera();
}
});
CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId);
StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] outputSizes = streamConfigurationMap.getOutputSizes(SurfaceHolder.class);
// 选择一个合适的预览尺寸
Size previewSize = choosePreviewSize(outputSizes, desiredWidth, desiredHeight);
// 配置相机参数
CameraParameters cameraParameters = camera.getParameters();
cameraParameters.setPreviewSize(previewSize.getWidth(), previewSize.getHeight());
camera.setParameters(cameraParameters);
private CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
// 相机捕获完成时调用
// 可以在此更新预览图像
}
};
private void openCamera() {
try {
cameraManager.openCamera(cameraId, cameraStateCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
private void releaseCamera() {
if (camera != null) {
camera.close();
camera = null;
}
}
这些是解决Android相机2预览未显示的常见方法。根据具体情况,您可能需要进一步调试和排查问题。