Google弃用了所有较早答案的方法(可能是因为这样的麻烦),因为API 21要求您使用Camera 2 API:
该类在API级别21中已弃用。我们建议对新应用程序使用新的android.hardware.camera2 API。
在更新的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 OS不能真正找出哪台相机确切在哪里:也许唯一的相机硬编码ID是代表其重要性的整数,或者在某些设备上,无论您转向哪一侧。背部”。
文档:https : //developer.android.com/reference/android/hardware/camera2/package-summary.html
明确的示例:https : //github.com/googlesamples/android-Camera2Basic
对于较旧的API(不建议使用,因为它在较新的Android版本的现代手机上不起作用,并且传输非常麻烦)。只需使用相同的Integer CameraID(1)来打开前置摄像头,如下所示:
cam = Camera.open(1)
如果您信任OpenCV做摄像头部分:
内
<org.opencv.android.JavaCameraView
../>
对前置摄像头使用以下功能:
opencv:camera_id="1"