Kamera-Intents

Für grundlegende Kameraaktionen wie das Aufnehmen eines Fotos oder Videos mit der Standardkamera des Geräts ist keine Integration mit einer Kamerabibliothek erforderlich. Verwende stattdessen Intent.

Fotos mit einer Kamera-App aufnehmen

Android delegiert Aktionen durch Aufrufen eines Intent-Objekts an andere Anwendungen. Dieser Prozess umfasst drei Teile: das Intent selbst, einen Aufruf zum Starten des externen Activity und einige Code zum Verarbeiten der Bilddaten, wenn der Fokus auf Ihre Aktivität zurückkehrt.

Hier ist eine Funktion, die ein Intent aufruft, um ein Foto aufzunehmen.

Kotlin

val REQUEST_IMAGE_CAPTURE = 1
 
private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // display error state to the user
    }
}

Java

static final int REQUEST_IMAGE_CAPTURE = 1;
 
private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } catch (ActivityNotFoundException e) {
        // display error state to the user
    }
}

Ein Video mit einer Kamera-App aufnehmen

Sie können auch ein Intent aufrufen, um ein Video aufzunehmen.

Kotlin

val REQUEST_VIDEO_CAPTURE = 1
 
private fun dispatchTakeVideoIntent() {
    Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
        takeVideoIntent.resolveActivity(packageManager)?.also {
            startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
        } ?: run {
          //display error state to the user
        }
    }
}

Java

static final int REQUEST_VIDEO_CAPTURE = 1;
 
private void dispatchTakeVideoIntent() {
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
    else {
      //display error state to the user
    }
}

Die Methode startActivityForResult() ist durch eine Bedingung geschützt, die resolveActivity() aufruft. Dadurch wird die erste Aktivitätskomponente zurückgegeben, die Intent verarbeiten kann. Führe diese Prüfung aus, um dafür zu sorgen, dass ein Intent aufgerufen wird, das deine App nicht zum Absturz bringt.

Weitere Ressourcen

Für grundlegende Kameraaktionen solltest du Intent verwenden. Andernfalls empfiehlt es sich, die Bibliotheken Camera2 und CameraX für komplexere Funktionen als die einfachen Bild- oder Videoaufnahmen zu verwenden.