Намерения, связанные с камерой

Чтобы выполнять основные действия, например снимать фото или видео с помощью стандартного приложения камеры, не нужно интегрировать библиотеку Camera. Вместо этого используйте Intent.

Как сделать снимок с помощью приложения "Камера"

Android делегирует действия другим приложениям, вызывая Intent. Этот процесс состоит из трех частей: самого Intent, вызова для запуска внешнего Activity и кода для обработки данных изображения, когда фокус возвращается к вашему действию.

Ниже приведена функция, которая вызывает Intent для съемки фотографии.

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

Запишите видео с помощью приложения камеры.

Вы также можете вызвать Intent, чтобы записать видео.

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

Метод startActivityForResult() защищен условием, которое вызывает resolveActivity(), возвращающий первый компонент действия, который может обработать Intent. Это позволит убедиться, что вы вызываете Intent, который не приведет к сбою приложения.

Дополнительные ресурсы

Для базовых действий с камерой используйте Intent. Для более сложных задач рекомендуется использовать библиотеки Camera2 и CameraX.