Google 已弃用所有旧答案的方法(可能是因为这样的麻烦),因为 API 21 你需要 use Camera 2 API:
此类已在 API 级别 21 中弃用。我们建议使用新的
android.hardware.camera2 API 用于新应用程序。
在 the newer API 中,您对 Android 设备的摄像头和文档拥有几乎完全的权力,并明确建议
String[] getCameraIdList()
然后使用获取的CameraId打开相机:
void openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)
99%的前置摄像头id = "1",后置摄像头id = "0"
根据这个:
不可移动的相机使用从 0 开始的整数作为它们的
标识符,而可移动相机对每个都有一个唯一的标识符
单个设备,即使它们是同一型号。
然而,这意味着如果设备情况很少见,例如只有 1 个前置摄像头的平板电脑,您需要计算您拥有多少个嵌入式摄像头,然后下订单相机的重要性(“0”)。所以 CAMERA_FACING_FRONT == 1 CAMERA_FACING_BACK == 0,这意味着后置摄像头比前置摄像头更重要。
我不知道在所有 Android 设备上识别前置摄像头的统一方法。简单地说,由于某些原因,设备内部的 Android 操作系统无法真正找出哪个摄像头的确切位置:也许唯一的摄像头硬编码 id 是一个表示其重要性的整数,或者在某些设备上,无论您转向哪一边都会是..”回来”。
文档:https://developer.android.com/reference/android/hardware/camera2/package-summary.html
显式示例:https://github.com/googlesamples/android-Camera2Basic
对于较旧的 API(不建议这样做,因为它不适用于较新的 Android 版本的现代手机,并且传输很麻烦)。只需使用相同的 Integer CameraID (1) 打开前置摄像头,就像在this answer 中一样:
cam = Camera.open(1);
如果您信任 OpenCV 来做相机部分:
里面
<org.opencv.android.JavaCameraView
../>
使用以下前置摄像头:
opencv:camera_id="1"