2017-08-05 512 views

回答

0

对我的作品在未来的配置与官方的API USB相机:

相机(旧API)

在某些中国设备,Camera.CameraInfo.CAMERA_FACING_FRONT作品,但有些时候你应该强制camIdx 0 。

public static Camera getCameraInstance() { 
    Camera c = null; 
    try { 
     Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
     int cameraCount = Camera.getNumberOfCameras(); 
     for (int camIdx = 0; camIdx < cameraCount; camIdx++) { 
      Camera.getCameraInfo(camIdx, cameraInfo); 
      Log.i(TAG, "[Camera] try to open camera camIdx:" + camIdx); 
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
       try { 
        c = Camera.open(camIdx); 
        mCameraIdx = camIdx; 
        Log.i(TAG, "[Camera] camIdx:" + camIdx); 
       } catch (RuntimeException e) { 
        Log.e(TAG, "[Camera] failed to open: " + e.getLocalizedMessage()); 
       } 
      } 
     } 

     if (c == null) { 
      Log.i(TAG, "[Camera] forcing open camera with camIdx 0"); 
      c = Camera.open(0); // force because FACING_FRONT not found 
      mCameraIdx = 0; 
     } 
    } catch (Exception e) { 
     Logger.e("TAG", "[Camera] Open camera failed: " + e); 
    } 
    return c; 
} 

Camera2(新API)

为Camera2 API类似:

public String getCamera(CameraManager manager) { 

    String cameraIndex = "0"; 
    try { 
     for (String cameraId : manager.getCameraIdList()) { 
      CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 
      Logger.d(TAG, "cameraId " + cameraId); 
      int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING); 
      if (cOrientation != CAMERACHOICE) { 
       cameraIndex = cameraId; 
      } 
     } 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
    return cameraIndex; 
} 

但在我的经验,一些Android的ROM的实现是非常糟糕的(有时定制的硬件或中国硬件),那么它不工作。在某些情况下,您应该使用libuvc驱动程序,前提是某些USB摄像头:https://github.com/saki4510t/UVCCamera

0

目前有(安卓操作系统)通过标准摄像头API在Android设备上没有常见的USB摄像头支持。

一些Android制造商确实对USB摄像头有自己的支持,但很难知道哪些设备是做什么和不做什么的。