Intencje kamery

Aby wykonywać podstawowe czynności związane z aparatem, 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 Intent.

Robienie zdjęć za pomocą aplikacji Aparat

Android przekazuje działania do innych aplikacji, wywołując Intent. Ten proces obejmuje 3 elementy: sam Intent, wywołanie, które uruchamia zewnętrzny Activity, oraz kod do obsługi danych obrazu, gdy fokus powró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 Aparat

Możesz też wywołać 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 metodę resolveActivity(). Zwraca ona pierwszy komponent aktywności, który może obsłużyć Intent. Sprawdź, czy wywołujesz funkcję Intent, która nie spowoduje awarii aplikacji.

Dodatkowe materiały

W przypadku podstawowych działań kamery użyj Intent. W przypadku bardziej złożonych zadań niż podstawowe robienie zdjęć i nagrywanie filmów zalecamy używanie bibliotek Camera2 i CameraX.