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 obiektu Intent.

Robienie zdjęć za pomocą aplikacji aparatu

Android przekazuje działania innym aplikacjom, wywołując interfejs Intent. Ten proces składa się z 3 części: samego elementu Intent, wywołania zewnętrznego obiektu Activity oraz kodu do obsługi danych obrazu, gdy zaznaczenie wróci do aktywności.

Oto funkcja, która wywołuje funkcję Intent w celu zrobienia zdjęcia.

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 wywołujący resolveActivity(), który zwraca pierwszy komponent aktywności, który obsługuje 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 zaleca się używanie bibliotek Camera2 i AparatuX do bardziej złożonych działań niż podstawowe robienie zdjęć i rejestrowanie filmów.