Tất cả các phương pháp của câu trả lời cũ hơn không được Google chấp nhận (được cho là vì những rắc rối như thế này), vì API 21, bạn cần sử dụng API Máy ảnh 2:
Lớp này không được chấp nhận ở cấp độ API 21. Chúng tôi khuyên bạn nên sử dụng API android.hardware.camera2 mới cho các ứng dụng mới.
Trong API mới hơn, bạn gần như có toàn quyền đối với camera của thiết bị Android và tài liệu hướng dẫn rõ ràng
String[] getCameraIdList()
và sau đó sử dụng CameraId thu được để mở camera:
void openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)
99% camera trước có id = "1" và camera sau id = "0"
theo điều này:
Máy ảnh không thể tháo rời sử dụng các số nguyên bắt đầu từ 0 cho số nhận dạng của chúng, trong khi máy ảnh rời có số nhận dạng duy nhất cho từng thiết bị riêng lẻ, ngay cả khi chúng là cùng một kiểu máy.
Tuy nhiên , điều này có nghĩa là nếu tình huống thiết bị hiếm gặp như máy tính bảng màn hình 1 mặt trước, bạn cần đếm số lượng camera được nhúng và đặt thứ tự của camera theo mức độ quan trọng của nó ("0"). Vì vậy CAMERA_FACING_FRONT == 1 CAMERA_FACING_BACK == 0, có nghĩa là camera sau quan trọng hơn camera trước.
Tôi không biết về một phương pháp thống nhất để xác định camera trước trên tất cả các thiết bị Android. Nói một cách đơn giản, hệ điều hành Android bên trong thiết bị thực sự không thể tìm ra máy ảnh nào chính xác ở đâu vì một số lý do: có thể id mã hóa cứng máy ảnh duy nhất là một số nguyên đại diện cho tầm quan trọng của nó hoặc có thể trên một số thiết bị mà bạn quay về phía nào .. " trở lại".
Tài liệu : https://developer.android.com/reference/android/hardware/camera2/package-summary.html
Ví dụ rõ ràng : https://github.com/googlesamples/android-Camera2Basic
Đối với API cũ hơn (nó không được khuyến khích, vì nó sẽ không hoạt động trên điện thoại hiện đại phiên bản Android mới hơn và việc chuyển giao là một điều khó khăn). Chỉ cần sử dụng cùng một Integer CameraID (1) để mở camera phía trước như trong câu trả lời sau:
cam = Camera.open(1)
Nếu bạn tin tưởng OpenCV thực hiện phần camera:
Phía trong
<org.opencv.android.JavaCameraView
../>
sử dụng các tính năng sau cho camera trước:
opencv:camera_id="1"