【问题标题】:How to detect if android phone has dual back camera如何检测安卓手机是否有双后置摄像头
【发布时间】:2017-11-15 06:52:22
【问题描述】:

如何检测安卓手机是否有双后置摄像头

我试过了

CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
    try {
        for(String id: manager.getCameraIdList())
            Log.e("dualtest", id);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }

但它只给了我 2 个 id 0 和 1。

【问题讨论】:

标签: java android camera


【解决方案1】:

Nishant,我在我的 Mi A1 上进行了同样的测试,发现我只有两个摄像头。你找到答案了吗?

for(String camera_id : cameraManager.getCameraIdList()){
    Log.d(TAG, "Available Cameras: id: " + camera_id + " and rear facing = " + (cameraManager.getCameraCharacteristics(camera_id).get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK));
}

输出:

可用的摄像头:id: 0 和背面 = true

可用的摄像头:id: 1 和背面 = false

还在 LG 双摄像头访问中找到 this link。如果有人可以帮助回答如何在 Mi A1 上启用第二个后置摄像头,那将会很有帮助

【讨论】:

    【解决方案2】:

    您可以使用Camera.getCameraInfo,如下所示。如果你使用 api lvl 9

    List<Integer> camID = new ArrayList<Integer>();    
            for(int i=0;i<Camera.getNumberOfCameras();i++){
                CameraInfo cameraInfo = new CameraInfo();
                Camera.getCameraInfo(i,cameraInfo);
                if(cameraInfo.facing==CameraInfo.CAMERA_FACING_BACK) {
                    camID.add(i);
                    break;
                }
            }
    

    如果您使用的是 21 级 api,则可以使用 Camera2 api

    List<String> camID = new ArrayList<String>(); 
    
        CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        for(String cameraId:manager.getCameraIdList()){
            CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(cameraId);
            Integer facing = cameraCharacteristics.get(CameraCharacteristics.LENS_FACING);
            if(facing==CameraMetadata.LENS_FACING_BACK) {
                camID.add(cameraId);
                break;
            }
        }
    

    参考

    https://developer.android.com/reference/android/hardware/camera2/CameraManager.html

    https://developer.android.com/reference/android/hardware/Camera.html#getCameraInfo(int,%20android.hardware.Camera.CameraInfo)

    【讨论】:

    • Camera.getNumberOfCameras 返回 2,但我使用的是 mi a1,其中 3 个摄像头 1 前置和双后置
    • 我可以在 MI A1 上确认它返回 2。令人惊讶的是,预览大小不是 4k。最大值为 1080 :(
    【解决方案3】:

    这里只是个人意见,但我认为这是不可能的(尽管我没有任何证据)。通常,这两个双摄像头本身是非常不同的:光圈、变焦、颜色等。它们本身可能无法很好地工作,但是当软件结合两者的输入时,它们会做得很好。但是如果处理软件非常好,你甚至不需要双摄像头设置(以谷歌的相机应用程序为例,它在这方面做得很好)。总而言之,这种双摄像头的制作方法有很多种,如果单个摄像头在某些设置上工作,在其他设置上可能完全没用。这就是为什么我相信即使您在背面有 2 个摄像头,系统也会将它们视为单个摄像头。此外,考虑到 Android 手机制造商的数量,很难将它们全部对齐以开发统一的 API。根据制造商的不同,他们可能会为您提供一些 API 来仅访问一个摄像头,但这只能在他们的手机上使用,并且在 Google 不切换到双摄像头设置之前,我不相信会有 API提供此功能。

    【讨论】:

    • @lulian 如果他们是手机上的双后置摄像头,我只需要提供一个功能。所以我只想知道是否存在双后置摄像头我搜索了很多但我没有得到任何东西。
    • 请问是什么功能?
    • 一个功能是尽可能提供散景效果
    • 嗯,这已经是由 2 台相机加上软件制作的(或者如果您是谷歌,只能由软件制作)。您无需执行任何其他操作。
    • @lulian 告诉我两台相机是同时拍摄 2 张​​不同的照片并稍后合并,还是只拍摄一张照片?
    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多