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(), która zwraca pierwszy komponent aktywności, który może obsłużyć Intent. Sprawdź, czy wywołujesz Intent, które 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ęć lub nagrywanie filmów zalecamy używanie bibliotek Camera2 i CameraX.