【问题标题】:Unable to focus distance in Camera2 API无法在 Camera2 API 中对焦距离
【发布时间】:2021-01-26 05:54:59
【问题描述】:

我正在尝试在 Android camera2 API 中设置焦距,但得到 Attempt to invoke virtual method 'float java.lang.Float.floatValue()' on a null object reference。我在三星 android 10 上试过,效果很好。当我尝试使用 redmi photo 时出现此错误,有人知道如何解决此问题吗?

这是我的代码:

 public void focus(float distance) {
        CameraManager cameraManager = (CameraManager) app.getSystemService(Context.CAMERA_SERVICE);
        CameraCharacteristics characteristics = null;
        try {
            characteristics = cameraManager.getCameraCharacteristics(cameraID);
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }

        float minimumLens = characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);

        float num = (distance * minimumLens / 100);
        captureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF);
        captureRequestBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, num);
        refreshCamera();
    }

【问题讨论】:

    标签: android android-camera2


    【解决方案1】:

    嗯,那是小米……你不能确定相机模块是否支持一些功能,比如对焦。一个也是唯一一个几乎总是正常工作的功能是拍照/位图。相机模块可能不支持所有其他功能 - 即使设备上的应用程序可以使用某些功能(例如焦点),也不能保证制造商在 Camera2 API(或任何其他 API)中实现了此功能

    考虑使用CameraX lib,它会尝试以非常不同的方式来解决访问某些功能/分辨率/参数的问题。它仍然可能会失败(但很少)或返回相机不支持此类功能的信息

    【讨论】:

    • 感谢您的回复,是否可以知道该功能是否以某种方式存在?这很重要。
    • 很遗憾,不,这就是问题所在...... Android API 提供了打开/关闭某些功能的可能性,但处理 API 调用必须由设备制造商实现,有时制造商正在制作自己的相机应用程序用户,为此应用程序和所有其他相机应用程序提供一些更高的权限和/或访问隐藏的 API 不能使用这些功能......这发生在所有制造商的设备上,更常见于“更便宜”的型号和“本质上是中国的” " 制造商(例如较旧的小米设备、一些 Oppo 的、realme 等)
    • 尝试使用在答案中链接的 CameraX 库,它可以绕过一些限制,并为这种情况提供大量的解决方法。如果任何解决方法都无法使用某些功能,CameraX 可能会返回一些错误代码而不是崩溃,最好在这种情况下这样做
    • 如果有帮助,请考虑更新/接受答案,祝您好运!
    • 好的,谢谢,这是我认为的唯一答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多