Intencje kamery

Aby wykonywać podstawowe czynności związane z kamerą, takie jak robienie zdjęć lub nagrywanie filmów za pomocą domyślnej aplikacji aparatu na urządzeniu, nie musisz integrować się z biblioteką aparatu. Zamiast tego użyj elementu Intent.

Robienie zdjęć za pomocą aplikacji aparatu

Android deleguje działania do innych aplikacji, wywołując Intent. Ten proces obejmuje 3 elementy: samą funkcję Intent, wywołanie do uruchomienia zewnętrznej funkcji Activity oraz kod do obsługi danych obrazu, gdy fokus wróci do Twojej aktywności.

Oto funkcja, która wywołuje Intent, aby zrobić zdjęcie.

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
    }
}

Nagrywanie filmu za pomocą aplikacji aparatu

Możesz też użyć Intent, aby nagrać film.

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
    }
}

Metoda startActivityForResult() jest chroniona przez warunek, który wywołuje funkcję resolveActivity(), zwracającą pierwszy komponent aktywności, który może obsłużyć funkcję Intent. Wykonaj to sprawdzenie, aby upewnić się, że wywołujesz Intent, który nie spowoduje awarii aplikacji.

Dodatkowe materiały

Do wykonywania podstawowych czynności związanych z kamerą użyj Intent. W przeciwnym razie zalecamy używanie bibliotek Camera2 i CameraX do wykonywania bardziej złożonych operacji niż podstawowe przechwytywanie obrazu lub wideo.