2017-08-05 155 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攝像頭有自己的支持,但很難知道哪些設備是做什麼和不做什麼的。

相關問題