Intencje kamery

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

Robienie zdjęć za pomocą aplikacji aparatu

Android przekazuje działania do innych aplikacji, wywołując Intent. Ten proces składa się z 3 elementów: samej aplikacji Intent, wywołania, które uruchamia zewnętrzną aplikację Activity, oraz kodu 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 aparatu

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 resolveActivity(), co zwraca pierwszy komponent aktywności, który może obsłużyć Intent. Wykonaj tę kontrolę, aby upewnić się, że wywołujesz Intent, który nie spowoduje awarii aplikacji.

Dodatkowe materiały

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