Намерения камеры

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

Сделайте снимок с помощью приложения камеры

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

Вот функция, которая вызывает Intent сделать снимок.

Котлин

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

Ява

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 для захвата видео.

Котлин

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

Ява

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() защищен условием, вызывающимsolveActivity resolveActivity() , которое возвращает первый компонент активности, который может обработать Intent . Выполните эту проверку, чтобы убедиться, что вы вызываете Intent , которое не приведет к сбою вашего приложения.

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

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