Wszystkie metody starszych odpowiedzi są przestarzałe przez Google (prawdopodobnie z powodu takich problemów), ponieważ API 21 musisz użyć API Camera 2:
Ta klasa została wycofana na poziomie API 21. Zalecamy używanie nowego interfejsu API android.hardware.camera2 do nowych aplikacji.
W nowszym interfejsie API masz prawie całkowitą władzę nad aparatem urządzenia z Androidem i dokumentacją, która zawiera wyraźne porady
String[] getCameraIdList()
a następnie użyj uzyskanego CameraId, aby otworzyć kamerę:
void openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)
99% przednich kamer ma id = "1", a tylny aparat id = "0",
zgodnie z tym:
Kamery niewymienne używają jako identyfikatorów liczb całkowitych zaczynających się od 0, podczas gdy kamery wymienne mają niepowtarzalny identyfikator dla każdego urządzenia, nawet jeśli są tego samego modelu.
Oznacza to jednak , że jeśli sytuacja z urządzeniem jest rzadka, jak np. Tablet z jedną kamerą przednią, należy policzyć liczbę posiadanych kamer wbudowanych i uporządkować je według ich ważności („0”). Więc CAMERA_FACING_FRONT == 1 CAMERA_FACING_BACK == 0, co oznacza, że tylna kamera jest ważniejsza niż przednia.
Nie znam jednolitej metody identyfikacji przedniego aparatu na wszystkich urządzeniach z Androidem. Mówiąc najprościej, system operacyjny Android w urządzeniu nie może naprawdę dowiedzieć się, która kamera jest dokładnie tam, z pewnych powodów: być może jedynym zakodowanym na stałe identyfikatorem kamery jest liczba całkowita reprezentująca jej znaczenie, a może na niektórych urządzeniach, w którą stronę się zwrócisz ... ” plecy".
Dokumentacja : https://developer.android.com/reference/android/hardware/camera2/package-summary.html
Jawne przykłady : https://github.com/googlesamples/android-Camera2Basic
W przypadku starszego API (nie jest to zalecane, ponieważ na nowoczesnych telefonach nie będzie działać nowsza wersja Androida, a transfer jest uciążliwy). Po prostu użyj tego samego Integer CameraID (1), aby otworzyć przednią kamerę, jak w tej odpowiedzi :
cam = Camera.open(1)
Jeśli ufasz OpenCV jako część aparatu:
Wewnątrz
<org.opencv.android.JavaCameraView
../>
użyj następujących dla przedniego aparatu:
opencv:camera_id="1"