如何检测android手机是否有双背相机

时间:2017-11-15 06:52:23

标签: java android camera

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

我试过

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

但它只给我2个0和1。

3 个答案:

答案 0 :(得分:1)

Nishant,我在Mi A1上进行了相同的测试,发现我只有两台相机。你能找到答案吗?

import java.io.File;
import java.io.IOException;
import java.util.Map;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

// Dummy Main that loads dummy data just for illustrative purposes. 
public class DummyMain
{
   private static final ObjectMapper MAPPER = new ObjectMapper();
   private static final String FILE_PATH = "files/data.json";

   public static void main(String[] args)
      throws JsonParseException,
         JsonMappingException,
         IOException
   {
      // Read in JSON. Contents can be arbitrary.
      Map<String, Object> data = MAPPER.readValue(new File(FILE_PATH), Map.class);

      // Runs FooModifier with dummy data
      FooModifier modifier = new FooModifier();
      modifier.run(data);

      // Just to print output for this example
      System.out.println(MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(data));
   }
}

输出:

  

可用的相机:id:0和后方饰面= true

     

可用的相机:id:1,后方饰面= false

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

答案 1 :(得分:0)

您可以使用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;
            }
        }

如果您使用的是api lvl 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)

答案 2 :(得分:0)

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