You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中为主摄像头设置5-10cm固定对焦值的方法

如何让Android主摄像头固定对焦在5-10cm距离

要实现关闭自动对焦、固定聚焦到5-10cm物体的需求,需根据你的代码中使用的Camera2或Camera1(Legacy)API分别处理,以下是具体修改方案:


一、先确认摄像头支持手动对焦

在chooseCamera()方法中,先检查目标摄像头是否支持手动对焦控制,避免后续操作无效:

private String chooseCamera() {
    CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    try {
      for (final String cameraId : manager.getCameraIdList()) {
        final CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);

        // 跳过前置摄像头
        final Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);
        if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
          continue;
        }

        final StreamConfigurationMap map =
                characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        if (map == null) {
          continue;
        }

        // 新增:检查是否支持手动对焦
        int[] afModes = characteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);
        if (afModes == null || !Arrays.asList(afModes).contains(CaptureRequest.CONTROL_AF_MODE_OFF)) {
            LOGGER.w("当前摄像头不支持手动对焦,跳过");
            continue;
        }

        // 判断是否使用Camera2 API
        useCamera2API =
                (facing == CameraCharacteristics.LENS_FACING_FRONT)
                        || isHardwareLevelSupported(characteristics);
        LOGGER.i("Camera API lv2?: %s", useCamera2API);

        return cameraId;
      }
    } catch (CameraAccessException e) {
      LOGGER.e(e, "无法访问摄像头");
    }
    return null;
}

二、Camera2 API场景修改(CameraConnectionFragment)

在CameraConnectionFragment的相机预览会话创建逻辑中,添加固定对焦的配置:

找到创建CaptureRequest.Builder的代码位置,添加以下设置:

// 创建预览请求Builder
CaptureRequest.Builder previewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
previewRequestBuilder.addTarget(surface);

// 1. 关闭自动对焦,锁定对焦状态
previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF);

// 2. 设置对焦距离:参数单位是1/m,对应5-10cm的范围是10(1/0.1)到20(1/0.05)
// 示例设置为15,对应约6.67cm的对焦距离
previewRequestBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, 15.0f);

// 后续继续构建会话
CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {
    // 你的回调逻辑
};
cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
    @Override
    public void onConfigured(@NonNull CameraCaptureSession session) {
        try {
            session.setRepeatingRequest(previewRequestBuilder.build(), captureCallback, backgroundHandler);
        } catch (CameraAccessException e) {
            LOGGER.e(e, "设置预览请求失败");
        }
    }

    // 其他回调方法
}, backgroundHandler);

参数说明

  • CONTROL_AF_MODE_OFF:完全关闭自动对焦,保持当前对焦参数
  • LENS_FOCUS_DISTANCE:对焦距离的倒数(1/米),比如:
    • 5cm → 0.05米 → 倒数为20.0f
    • 10cm → 0.1米 → 倒数为10.0f
      你可以根据需求在10.0f~20.0f之间调整具体值

三、Camera1 API场景修改(LegacyCameraConnectionFragment)

在LegacyCameraConnectionFragment获取到Camera实例后,修改对焦参数:

找到初始化Camera的代码位置,添加以下配置:

Camera camera = camera.open();
Camera.Parameters params = camera.getParameters();

// 1. 设置对焦模式为微距(优先适配近距离对焦)
if (params.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_MACRO)) {
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
} else {
    // fallback到固定对焦模式
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_FIXED);
}

// 2. 部分设备支持直接设置对焦距离(单位:米),这里设置为0.075m(7.5cm)
if (params.isFocusDistanceSupported()) {
    params.setFocusDistance(0.075f);
}

camera.setParameters(params);

// 3. 触发一次自动对焦后锁定状态
camera.autoFocus(new Camera.AutoFocusCallback() {
    @Override
    public void onAutoFocus(boolean success, Camera camera) {
        if (success) {
            // 对焦成功后取消自动对焦,保持当前对焦状态
            camera.cancelAutoFocus();
        }
    }
});

// 后续设置预览等逻辑
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();

注意事项

  • Camera1的对焦参数兼容性较差,部分设备可能不支持直接设置对焦距离,此时使用FOCUS_MODE_MACRO可以近似实现近距离对焦
  • 调用cancelAutoFocus()后,摄像头会保持当前对焦状态,不再自动调整

内容的提问来源于stack exchange,提问作者rmz918

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:03:49