- • Самый простой метод – использование стандартных приложений. Стандартные приложения вызываются посредством интента и делают всю основную работу разработчика. Это очень удобно, если нужно просто сделать фото или записать видео в файл, так как требует от минимум кода и лишает возможности сделать ошибки. Причем этот метод позволяет настроить качество видео/фото и указать файл для записи.
• Использование класса android.hardware.Camera позво-лияет задать параметры снятия изображения, фото и получать кадры, которые впоследствии можно будет закодировать в один из видео форматов, но потребует от разработчика достаточно много кода и будет достаточно сложен.
• Для записи видео некий компромисс между «сырыми» данными от камеры и записи видео через стандартное приложение предоставляет класс android.media.MediaRecorder. В отличие от записи видео «через интент», здесь можно не пользоваться «чужими» приложениями, а сделать свой интерфейс, кроме того, здесь доступны некоторые расширенные возможности настройки видеозаписи, такие как кодирование видео в определенный формат.
• Для превью можно использовать класс android.view.SurfaceView. Этот класс может отображать живую картинку, полученную с камеры (класс android.hardware.Camera), что очень удобно для пользователя.
Рассмотрим пример использования стандартного приложения для получения фото.
- Код: выделить все
final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
В коде создается интент с действием ACTION_IMAGE_CAPTURE, которое соответствует захвату изображения. Создается файл, в который изображение будет сохранено, и его имя записывается в интент, запускается стандартное приложение.
Для использования камеры будет нужно разрешение CAMERA. Если записываете аудио вместе с видео, то понадобится и RECORD_AUDIO. Скорее всего, не обойтись и без WRITE_EXTERNAL_STORAGE, ведь такой объем данных лучше всего хранить на SD-карте. Если ваше приложение добавляет к изображениям информацию о местоположении с GPS, то необходимо прописать в манифесте разрешение ACCESS_FINE_LOCATION.