2010-10-14 88 views

回答

1

如何检测是否有前置摄像头,以及是否有如何到达并使用前置摄像头?

有没有API,至少通过Android 2.2。幸运的是,即将推出的Gingerbread版本将增加对前置摄像头的内置支持。抱歉!

+0

谢谢您的回答。 – shiz 2010-10-14 22:34:03

18

如果使用API​​级9(的Android 2.3)以上时,可以执行以下方法来计算(第一)前置摄像头的索引:

int getFrontCameraId() { 
    CameraInfo ci = new CameraInfo(); 
    for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) { 
     Camera.getCameraInfo(i, ci); 
     if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i; 
    } 
    return -1; // No front-facing camera found 
} 

然后可以使用索引为Camera.open方法,如:

int index = getFrontCameraId(); 
if (index == -1) error(); 
Camera c = Camera.open(index); 

来获得相关的相机。

+0

所以我的应用程序目标2.2,我如何有条件地使用此代码 – CQM 2012-01-11 19:24:58

+0

我认为你可以使用反射:http://digitaldumptruck.jotabout.com/?p=797 – Paul 2013-05-03 11:52:23

+1

检查cameraid不起作用kindle火。它只安装了一个摄像头,它有id == back_camera_id。 – 2013-05-29 11:09:49

5

Oak的代码将不支持SDK 21以上,所以我已经添加了这些行,使其可用:)

int getFrontCameraId(CameraManager cManager) { 
    if (Build.VERSION.SDK_INT < 22) { 
     Camera.CameraInfo ci = new Camera.CameraInfo(); 
     for (int i = 0; i < Camera.getNumberOfCameras(); i++) { 
      Camera.getCameraInfo(i, ci); 
      if (ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) return i; 
     } 
    } else { 
     try { 
      for (int j = 0;j<cManager.getCameraIdList().length; j++) { 
       String[] cameraId = cManager.getCameraIdList(); 
       CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId[j]); 
       int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING); 
       if (cOrientation == CameraCharacteristics.LENS_FACING_FRONT) 
        return j; 
      } 
     } catch (CameraAccessException e) { 
      e.printStackTrace(); 
     } 
    } 

    return -1; // No front-facing camera found 
} 

我已经更新橡树的代码,现在支持新camera2库还。

0

Kalpit,我不知道你是如何设法让代码工作的。我试图编辑你的答案,但完整的答案需要改变。这是我得到的。

@SuppressLint("NewApi") 
int getFrontCameraId() { 
    if (Build.VERSION.SDK_INT < 22) { 
     Camera.CameraInfo ci = new Camera.CameraInfo(); 
     for (int i = 0; i < Camera.getNumberOfCameras(); i++) { 
      Camera.getCameraInfo(i, ci); 
      if (ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) return i; 
     } 
    } else { 
     try { 
      CameraManager cManager = (CameraManager) getApplicationContext() 
       .getSystemService(Context.CAMERA_SERVICE); 
      String[] cameraId = cManager.getCameraIdList(); 
      for (int j = 0;j<cameraId.length; j++) { 
       CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId[j]); 
       int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING); 
       if (cOrientation == CameraCharacteristics.LENS_FACING_FRONT) 
        return Integer.parseInt(cameraId[j]); 
      } 
     } catch (CameraAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
    return -1; // No front-facing camera found 
} 
相关问题