在 Android 上 - 如何从广角相机捕获图像/视频?

kfi*_*fir 8 camera android android-camera2

如何从camera2 api广角相机捕捉图像或视频?还是望远镜?我知道如何处理前置和后置摄像头的摄像头捕获。我就是不明白如何打开相机并选择广角/伸缩相机?

我想这与设置以下其中一项有关:

CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
CameraCharacteristics.getPhysicalCameraIds()
CameraCharacteristics.getAvailablePhysicalCameraRequestKeys()
CameraDevice.createCaptureSession(SessionConfiguration config)
CameraCharactersitics.LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
Run Code Online (Sandbox Code Playgroud)

但是我无法理解设置它的场景,我没有找到任何好的解释。我将感谢任何类型的教程或解释。最后一个问题 - 如何在没有物理设备的情况下对其进行测试?我的意思是 - 如何设置 Avd/模拟器?

kfi*_*fir -1

所以,如果有人仍在寻找答案:几乎没有制造商支持这一点,直到 android 10。从 android 10 - 所有物理相机都是逻辑相机。这意味着您可以看到这些摄像头

manager.getCameraIdList()
Run Code Online (Sandbox Code Playgroud)

您将获得所有可用相机的列表,只需查找 CameraCharacteristics.LENS_FACING 方向即可。并填充一个列表。

这是完整的代码:

public CameraItem[] GetCameraListFirstTime() {
    List<CameraItem> listValuesItems = new ArrayList<CameraItem>();
    boolean IsMain = false;
    boolean IsSelfie = false;
    if(manager == null)
        manager = (CameraManager)mContext.getSystemService(CAMERA_SERVICE);
    try {

        for (String cameraId : manager.getCameraIdList()) {
            CameraCharacteristics chars = manager.getCameraCharacteristics(cameraId);
            if (!IsMain && chars.get(CameraCharacteristics.LENS_FACING) == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                listValuesItems.add(new CameraItem(Integer.parseInt(cameraId), "Main"));
                IsMain = true;
            }
            else if (!IsSelfie && chars.get(CameraCharacteristics.LENS_FACING) == Camera.CameraInfo.CAMERA_FACING_BACK) {

                    listValuesItems.add(new CameraItem(Integer.parseInt(cameraId), "Selfie"));
                    IsSelfie = true;
            }
            else
                listValuesItems.add(new CameraItem(Integer.parseInt(cameraId), "Wide or Other"));
        }

    }
    catch (CameraAccessException e) {
        Log.e(TAG, e.toString());

    }
    return listValuesItems.toArray(new CameraItem[0]);
}

public class CameraItem implements java.io.Serializable{
public int Key;
public String Description;
public CameraItem(int key, String desc)
{
    Key=key;
    Description = desc;
}
Run Code Online (Sandbox Code Playgroud)