Gibt es im Allgemeinen eine Möglichkeit, eine bestimmte Kamera zu initialisieren, wenn ein Gerät über mehr als eine eingebettete Kamera verfügt?
Ich habe es in der Android-Referenzdokumentation nicht gefunden:
- https://developer.android.com/reference/android/hardware/Camera.html
- https://developer.android.com/reference/android/hardware/camera2/package-summary.html
- https://developer.android.com/reference/android/hardware/camera2/CameraManager.html
Samsung SHW-M100S verfügt über zwei Kameras. Wenn es keinen Hinweis auf die Verwendung von zwei Kameras gibt, eine Idee, wie Samsung es gemacht hat ...?
Antworten:
Fügen Sie der
AndroidManifest.xml
Datei die folgenden Berechtigungen hinzu :Hinweis: Diese Funktion ist in Gingerbread (2.3) und der Up Android-Version verfügbar.
quelle
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Technik zu verwenden, um die vorhandene Kamera-App zu öffnen?Intent
behandelt Kameraaktionen auf seine eigene Weise. Diese Technik wird verwendet, wenn SieSurfaceView
die Kamerafunktionalität nutzen.Alle Methoden ältere Antworten werden von Google als veraltet (angeblich wegen Beschwerden wie diese), da API 21 Sie müssen verwenden die Kamera 2 API:
In der neueren API haben Sie fast die volle Macht über die Android-Gerätekamera und Dokumentation ausdrücklich empfohlen
und öffnen Sie die Kamera mit der erhaltenen CameraId:
99% der frontalen Kameras hat id = „1“, und die Rückseite der Kamera - ID = „0“ nach dieser:
Dies bedeutet jedoch , dass Sie , wenn eine Gerätesituation selten ist, wie z. B. ein Tablet mit 1 Frontalkamera, die Anzahl der eingebetteten Kameras zählen und die Reihenfolge der Kamera nach ihrer Wichtigkeit ("0") festlegen müssen . Also CAMERA_FACING_FRONT == 1 CAMERA_FACING_BACK == 0, was bedeutet, dass die Rückkamera wichtiger ist als die Frontkamera .
Ich kenne keine einheitliche Methode zur Identifizierung der Frontkamera auf allen Android-Geräten. Einfach gesagt, das Android-Betriebssystem im Gerät kann aus bestimmten Gründen nicht wirklich herausfinden, welche Kamera genau wo ist: Vielleicht ist die einzige fest codierte Kamera-ID eine Ganzzahl, die ihre Bedeutung darstellt, oder auf einigen Geräten, egal auf welcher Seite Sie sich befinden. " zurück".
Dokumentation : https://developer.android.com/reference/android/hardware/camera2/package-summary.html
Explizite Beispiele : https://github.com/googlesamples/android-Camera2Basic
Für die ältere API (es wird nicht empfohlen, da es auf modernen Handys nicht funktioniert, neuere Android-Version und Übertragung ist ein Schmerz im Arsch). Verwenden Sie einfach dieselbe Integer CameraID (1), um die Frontkamera wie in dieser Antwort zu öffnen :
Wenn Sie darauf vertrauen, dass OpenCV den Kamerateil übernimmt:
Innerhalb
Verwenden Sie für die Frontkamera Folgendes:
quelle
Ab Android 2.1 unterstützt Android nur eine einzige Kamera in seinem SDK. Es ist wahrscheinlich, dass dies in einer zukünftigen Android-Version hinzugefügt wird.
quelle
quelle
Für API 21 (5.0) und höher können Sie die CameraManager-APIs verwenden
quelle
Zum Öffnen der Rückseite der Kamera: -
Zum Öffnen der Frontkamera: -
Ich konnte es für API 28 und höher nicht zum Laufen bringen. Außerdem ist das direkte Öffnen der Frontkamera bei einigen Geräten nicht möglich (abhängig vom Hersteller).
quelle
Mit der Veröffentlichung von Android 2.3 (Gingerbread) können Sie die
android.hardware.Camera
Klasse jetzt verwenden , um die Anzahl der Kameras, Informationen zu einer bestimmten Kamera und einen Verweis auf eine bestimmte Kamera abzurufenCamera
. Schauen Sie sich hier die neuenCamera
APIs an .quelle
build.gradle
Ansicht einstellen
quelle
/ * Dies ist nicht der richtige Weg. Dies ist eine Lösung für ältere Geräte, auf denen Android 4.0 oder älter ausgeführt wird. Dies kann zu Testzwecken verwendet werden, wird jedoch für die Hauptentwicklung nicht empfohlen. Diese Lösung kann nur als vorübergehende Lösung betrachtet werden. Aber diese Lösung hat vielen geholfen, deshalb beabsichtige ich nicht, diese Antwort zu löschen * /
quelle