Android CameraX-获取相机信息(视角,预览图像尺寸)

时间:2019-06-22 20:42:44

标签: android android-camerax

我正在尝试从旧的Android相机API切换到新的CameraX API。我在增强现实应用程序中使用预览模式,我需要在预览所使用的相机上获取一些信息,例如视角和尺寸。

到目前为止,这是我的代码:

PreviewConfig config = new PreviewConfig.Builder()
                .setLensFacing(CameraX.LensFacing.BACK)
                .setTargetResolution(new Size(dsiWidth, dsiHeight))
                .build();
Preview preview = new Preview(config);
preview.setOnPreviewOutputUpdateListener(new Preview.OnPreviewOutputUpdateListener() {
            @Override
            public void onUpdated(Preview.PreviewOutput output) {
                tvCameraView.setSurfaceTexture(output.getSurfaceTexture());
            }
        });
CameraX.bindToLifecycle(this, preview);

到目前为止,该方法有效。但是,如何获得有关预览所用相机的信息?提前非常感谢!

1 个答案:

答案 0 :(得分:0)

使用"androidx.camera:camera-camera2:1.0.0-alpha02"依赖项时,您可以查看类Camera2CameraFactory。在那里,您可以了解如何确定前后摄像头。

    @Override
    public Set<String> getAvailableCameraIds() throws CameraInfoUnavailableException {
        List<String> camerasList = null;
        try {
            camerasList = Arrays.asList(mCameraManager.getCameraIdList());
        } catch (CameraAccessException e) {
            throw new CameraInfoUnavailableException(
                    "Unable to retrieve list of cameras on device.", e);
        }
        // Use a LinkedHashSet to preserve order
        return new LinkedHashSet<>(camerasList);
    }

    @Nullable
    @Override
    public String cameraIdForLensFacing(LensFacing lensFacing)
            throws CameraInfoUnavailableException {
        Set<String> cameraIds = getAvailableCameraIds();

        // Convert to from CameraX enum to Camera2 CameraMetadata
        Integer lensFacingInteger = -1;
        switch (lensFacing) {
            case BACK:
                lensFacingInteger = CameraMetadata.LENS_FACING_BACK;
                break;
            case FRONT:
                lensFacingInteger = CameraMetadata.LENS_FACING_FRONT;
                break;
        }

        for (String cameraId : cameraIds) {
            CameraCharacteristics characteristics = null;
            try {
                characteristics = mCameraManager.getCameraCharacteristics(cameraId);
            } catch (CameraAccessException e) {
                throw new CameraInfoUnavailableException(
                        "Unable to retrieve info for camera with id " + cameraId + ".", e);
            }
            Integer cameraLensFacing = characteristics.get(CameraCharacteristics.LENS_FACING);
            if (cameraLensFacing == null) {
                continue;
            }
            if (cameraLensFacing.equals(lensFacingInteger)) {
                return cameraId;
            }
        }

        return null;
    }

归结为从摄像机服务中选择与方向匹配的第一个摄像机。我认为他们将在未来的camerax版本中扩展这些api。