我的手机有三个摄像头,两个后置摄像头和一个前置摄像头,但是当我调用任一摄像头 API 时,它只报告 2 个摄像头(后置摄像头和前置摄像头之一),而第二个后置摄像头似乎丢失了?
int numCameras = Camera.getNumberOfCameras();
Log.d("tag","numCameras camera1:" + numCameras);
CameraManager camManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameraIds = camManager.getCameraIdList();
Log.d("tag","numCameras camera2:" + cameraIds.length);
每个 API 调用仅返回两个摄像头:
numCameras 相机1:2
numCameras 相机2:2
然而,第二个后置摄像头出现在一些第 3 方摄像头应用程序中,但显然被制造商“隐藏”了。我该如何访问此相机?
很可能,相机根本没有列在
getCameraIdList
返回的相机 ID 集中,但 getCameraCharacteristics
或 openCamera
等方法可以使用隐藏 ID。 因此,这些应用程序可能只是尝试使用 getCameraCharacteristics
的小整数 ID,看看它们是否返回信息而不是无效 ID 异常。
但由于它们未列出,因此未经过 Android 合规性测试,并且可能不遵循 API 规范。 每个未列出的相机可能都有其不同的怪癖和限制;毕竟它们没有被列出是有原因的。 要可靠地使用它们,需要测试每个未列出的设备,并可能在每次主要操作系统更新后重新测试 - 对于它们根本没有任何保证。