I have connected a usb camera and want open and take picture. I am trying to figure how to use "android.hardware.camera.external" feature for accessing that camera. The "manager.getCameraIdList();" returns count of 2 camera(for front and back) and not the usb camera that is connected.
Asked
Active
Viewed 1.3k times
3
-
Related: https://stackoverflow.com/q/41560464/295004 – Morrison Chang Aug 05 '17 at 21:03
-
Any suggestion on which camera to use in order to make it work? – Sebastian Corradi Aug 21 '23 at 05:37
2 Answers
4
For me works the next config for USB Cameras with official API:
Camera (old API)
On some china devices, Camera.CameraInfo.CAMERA_FACING_FRONT
works, but some times your should force to camIdx
to 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 (new API)
Similar for 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;
}
But in my experience some Android ROM implementations are really bad (sometimes custom hardware or china hardware) then it not works. In some situations you should be use libuvc
driver fore some USB Cameras: https://github.com/saki4510t/UVCCamera

Hpsaturn
- 2,702
- 31
- 38
2
There's currently (as of Android O) no common USB camera support on Android devices via the standard camera API.
Some Android manufacturers do have their own support for USB cameras, but it's hard to know what devices do and what don't.

Eddy Talvala
- 17,243
- 2
- 42
- 47
-
1
-
@EddyTalala, Is there any news on this? What about Android 13? Still in 2023, It doesn't seems there is any official API for external Camera which supports most of devices. – Rumit Patel Aug 17 '23 at 09:41
-
Any suggestion on which camera to use in order to make it work? – Sebastian Corradi Aug 21 '23 at 05:37