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

4

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

我尝试过:

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

但它只给了我两个ID,0和1。

你的 API 级别是多少? - Nisal Edu
API 级别为 24+。 - user5511158
你为什么想知道那个? - Iulian Popescu
获取 Build.model 并尝试将其与 https://www.gsmarena.com/results.php3?chkDualCamera=selected 匹配。 - Alex Cohn
你尝试过使用REQUEST_MAX_NUM_OUTPUT_RAW 了吗? - Alex Cohn
3个回答

1

Nishant,我在我的小米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,后置摄像头为真

可用相机:id:1,后置摄像头为假

在LG双摄像头访问方面还发现了此链接。如果有人能帮忙回答如何在Mi A1上启用第二个后置摄像头,那将非常有帮助。


0

您可以使用Camera.getCameraInfo如下所示。如果您使用的是API级别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;
            }
        }

如果您正在使用API级别21,则可以使用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,但我使用的是小米A1,它有3个摄像头,一个前置和双后置。 - user5511158
我可以确认在MI A1上它返回2。令人惊讶的是,预览大小不是4k。最大只有1080 :( - Shivam Pokhriyal

0
这只是个人意见,但我认为这是不可能的(虽然我没有任何证据)。通常,两个双摄像头本身非常不同:光圈、变焦、颜色等。它们可能单独工作效果不佳,但当软件将两者的输入结合起来时,会发挥出很好的作用。但如果处理软件非常好,甚至不需要双摄像头设置(例如谷歌的相机应用程序在这方面做得非常好)。总之,这些双摄像头的制作方式有很大的差异,如果单个摄像头在某些设置上工作,而在其他设置上可能完全无用。这就是为什么我认为即使你在后面有两个摄像头,系统也会将它们视为一个摄像头。此外,鉴于 Android 手机制造商的数量,要协调所有制造商以开发统一的 API 是很困难的。根据制造商的不同,他们可能会提供一些 API 来访问单个摄像头,但这只适用于他们的手机,并且在谷歌不转向双摄像头设置之前,我不认为会有提供此功能的 API。

@lulian,问题是我只需要在手机上添加一个功能,如果有双后置摄像头的话。所以我想知道是否存在双后置摄像头,我搜索了很多但没有找到任何信息。 - user5511158
我可以问一下是哪个功能吗? - Iulian Popescu
一个功能是如果可能的话给出bokeh效果。 - user5511158
@lulian,请问一下,这两个相机是同时捕捉两张不同的照片然后合并,还是只拍摄一张照片? - user5511158
要产生bokeh效果,难道不需要一种独立访问两个摄像头的方法吗?从表面上看,LG是首家为此提供SDK的公司,请参见http://mobile.developer.lge.com/develop/sdks/lg-dual-camera/ (适用于V20、V10、G5)。 - Alex Cohn
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接