- Полный список
- Android Top Camera Libraries
- CameraX
- CameraView
- Features
- CameraKit-Android
- Fotoapparat
- Работа с камерой в Android
- Android — Kotlin
- Using Camera in Android — Kotlin
- Using Built-in Camera
- Implementation:
- camera_intent.xml
- CameraIntentActivity.kt
- More Customization:
- file_paths.xml
- AndroidManifest.xml
- CameraIntentActivity.kt
- Run Application:
- Comments
Полный список
— получаем фото и видео, используя системное приложение
Открываем серию уроков по работе с камерой. И начнем с самого простого. Если вам в приложении необходимо сделать снимок или снять видео, вовсе необязательно для этого создавать отдельное Activity и работать в нем с объектом Camera. Можно использовать уже существующее в системе приложение.
Для этого ваше приложение должно отправить Intent с action = MediaStore.ACTION_IMAGE_CAPTURE (фото) или MediaStore.ACTION_VIDEO_CAPTURE (видео) и ждать ответ. Т.е. надо использовать методы startActivityForResult и onActivityResult.
Также, в этот Intent вы можете поместить желаемый путь к файлу и туда будет сохранен результат работы камеры. Для этого в Intent необходимо добавить Uri с ключом MediaStore.EXTRA_OUTPUT.
Напишем простое приложение, демонстрирующее эти возможности.
Project name: P1311_CameraIntent
Build Target: Android 2.3.3
Application name: CameraIntent
Package name: ru.startandroid.develop.p1311cameraintent
Create Activity: MainActivity
Добавим строки в strings.xml:
На экране только кнопки для получения фото и видео, и ImageView, в котором будем отображать полученное фото.
В onCreate мы вызываем свой метод createDirectory, который в папке Pictures создаст папку для наших файлов и поместит соответствующий объект File в переменную directory.
В onClickPhoto и onClickVideo создаем Intent с соответствующим action, добавляем в этот Intent желаемый путь к файлу и отправляем методом startActivityForResult.
В onActivityResult мы ловим результат от приложения камеры. Код громоздкий, т.к. там куча проверок на null. Для фото и для видео я пытаюсь вытащить путь к получившемуся файлу, используя Intent.getData. Кроме этого, для фото я еще пытаюсь вытащить Bitmap с получившимся изображением.
Метод generateFileUri генерирует путь к файлу. Для этого он берет путь из directory, определяет префикс и расширение в зависимости от типа (фото или видео) и использует системное время, как основную часть имени файла. Далее все это конвертируется в Uri и возвращается как результат метода.
Осталось дописать в манифест пару настроек.
— право на запись на SD карту
— ваше приложение в маркете будет видно только устройствам с камерой
Сохраняем все и запускаем приложение.
Жмем Photo – открывается системное приложение камеры. Делаем фото и подтверждаем, что нас устраивает полученный снимок. Нас возвращают в наше приложение.
fileName = /storage/emulated/0/Pictures/MyFolder/photo_1376465721626.jpg
Intent is null
В ответе мы не получили ничего, Intent = null. Но мы указывали путь, куда надо сохранить фото. Идем в папку Pictures/MyFolder и ищем свой файл, он должен там быть.
Попробуем получить видео. Жмем кнопку Video, снимаем ролик и подтверждаем, что он нас устраивает.
fileName = /storage/emulated/0/Pictures/MyFolder/video_1376466182087.mp4
Video uri: file:///storage/emulated/0/Pictures/MyFolder/video_1376466182087.mp4
В случае с видео Intent не null. И его метод getData вернул нам инфу о пути к файлу. Идем в папку и ищем свой файл.
Теперь давайте не будем явно указывать путь для сохранения, и посмотрим, как поведет себя приложение камеры.
Закомментируем соответствующие строки кода:
Сохраняем, запускаем приложение.
Жмем Photo, делаем снимок и подтверждаем его, открывается наше приложение и ImageView показывает только что сделанное фото.
Photo uri: null
bitmap 120 x 160
getData вернул null, хотя хелп обещал, что там будет путь к файлу. Зато в Intent мы получили Bitmap. Но, как видим, размер его оставляет желать лучшего. Получается, что вообще нет доступа к полноценному сделанному фото. Оно у меня даже не создалось в папке, куда камера по дефолту фоты сохраняет.
Скорее всего, это зависит от версии Android и системного приложения камеры. И у вас вполне может быть другое поведение системы.
Попробуем с видео. Жмем Video, снимаем и подтверждаем ролик.
Video uri: content://media/external/video/media/8018
С видео все ок. Камера сохранила видео в папку по умолчанию, и в Intent вернула нам Uri.
Кроме желаемого пути для видео вы можете указать еще некоторые параметры в intent:
MediaStore.EXTRA_DURATION_LIMIT – лимит продолжительности видео в секундах
MediaStore.EXTRA_SIZE_LIMIT – лимит размера получившегося видео в байтах
На следующем уроке:
— используем объект Camera для получения изображения с камеры
— подгоняем изображение под размеры экрана
— учитываем поворот устройства
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Android Top Camera Libraries
All the Android top camera libraries.
CameraX
CameraX is a camera library by Google. In Google IO 2019, Google added another powerful tool for camera development in Android development called CameraX as part of Jetpack. It is backward compatible till Android 5.0 / Lollipop (API 21) and it works with at least 90% devices in the market.
CameraView
CameraView aims to help Android developers easily integrate Camera features.
Features
- Camera preview by placing it in a layout XML (and calling the start method)
- Configuration by attributes
- Aspect ratio (app:aspectRatio)
- Auto-focus (app:autoFocus)
- Flash (app:flash)
CameraKit-Android
CameraKit takes one of the hardest Android APIs and makes it into a high level and easy to use the library that solves all of your problems.
With CameraKit you are able to seamlessly do the following…
- Image and video capture seamlessly working with the same preview session.
- Automatic system permission handling.
- Automatic preview scaling.
- Create a CameraView of any size (not just presets!).
- Automatic output cropping to match your CameraView bounds.
- Multiple capture methods.
- METHOD_STANDARD : an image captured normally using the camera APIs.
- METHOD_STILL : a freeze frame of the CameraView preview (similar to SnapChat and Instagram) for devices with slower cameras.
- METHOD_SPEED : automatic capture method determination based on measured speed.
- Built-in continuous focus.
- Built-in tap to focus.
- Built-in pinch to zoom.
Fotoapparat
Camera API in Android is hard. Having 2 different API for new and old Camera does not make things any easier. After several years of working with Camera, the developer came up with this library.
What it provides:
- Camera API which does not allow you to shoot yourself in the foot.
- Simple yet powerful parameters customization.
- Standalone custom CameraView which can be integrated into any Activity .
- Fixes and workarounds for device-specific problems.
- Both Kotlin and Java friendly configurations.
Источник
Работа с камерой в Android
Работа с камерой на телефоне всегда представляла для меня интерес. Как же это все устроено… И вот мне в руки попал телефон с Android’ом. Я не преминул возможностью попробовать разобраться в этом. Вот что получилось в итоге.
Рассмотрим небольшую программу, которая позволяет делать снимки.
Все операции проводятся с помощью класса Camera.
Необходимо завести переменную
и инициализировать ее
После завершения работы с камерой необходимо сделать
в противном случае камера останется заблокированной и недоступной для других приложений.
Для обычных приложений типа фотокамеры инициализацию лучше всего производить в onResume, а освобождение в onPause.
Обязательным условием при работе с камерой является создание окна предпросмотра (preview). Это окно должно являться объектом класса Surfaceи для отображения на экране подходит SurfaceView.
Объявим
Чтобы задать preview, необходимо вызвать метод setPreviewDisplay, параметром которого является объект класса SurfaceHolder.
Чтобы включить отображение preview, вызываем
Если этого не сделать, то камера не сможет делать снимки.
Собственно для того, чтобы сделать снимок, необходимо вызвать метод
С помощью параметров (кстати, любой из них может быть null) задаются обработчики разных событий:
- shutter — вызывается в момент получения изображения с матрицы
- raw — программе передаются для обработки raw данные (если поддерживается аппаратно)
- postview — программе передаются полностью обработанные данные (если поддерживается аппаратно)
- jpg — программе передается изображение в виде jpg. Здесь можно организовать запись изображения на карту памяти.
Вызов takePicture можно поместить непосредственно в обработчик onClick кнопки — в этом случае фотографирование произойдет сразу после нажатия на нее, но можно и воспользоваться предварительной автофокусировкой.
В этом случае задается обработчик Camera.AutoFocusCallback, в котором необходимо реализовать метод
Тогда после вызова в обработчике нажатия на кнопку camera.autoFocus(), однократно будет вызван обработчик, в котором мы уже и примем решение об удачной фокусировке и необходимости сделать снимок.
Для работы с SurfaceHolder можно задать SurfaceHolder.Callback
surfaceHolder.addCallback();
В этом случае необходимо реализовать методы
C помощью них приложению будет сообщаться о том, что Surface успешно создано, если оно изменено или то, что оно удалено.
Размер нашего preview можно менять в процессе выполнения программы:
Для приложения камеры удобнее всего сразу задать расположение экрана как
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
В противном случае нам придется, например, в surfaceCreated проверять расположение экрана и поворачивать preview с помощью, например, camera.setDisplayOrientation(0) .
Это не очень удобно, потому что поворот экрана занимает какое-то время. В этот момент происходит вызов onPause и onResume, пересоздается Surface.
Также имеется возможность объявить обработчик Camera.PreviewCallback, с помощью которого путем реализации метода
можно получать и обрабатывать каждый кадр, отображаемый в preview.
И последний важный момент. Чаще всего получается так, что отношение сторон SurfaceView отличается от отношения сторон в preview камеры. Поэтому для того, чтобы избежать искажений изображения на экране, необходимо подкорректировать размер отображаемого окна предпросмотра.
Чуть не забыл. В манифест необходимо добавить permission
MainScreen.java
main.xml
AndroidManifest.xml
Программа отлаживалась и тестировалась на телефоне LG Optimus One P500.
При написании использовались следующие источники информации:
Источник
Android — Kotlin
A blog to explore things in Android App Development using Kotlin.
Using Camera in Android — Kotlin
- Get link
- Other Apps
Using Built-in Camera
After the picture has been captured, the result will received on onActivityResult method. There, we can get the data, in Bitmap form.
Implementation:
camera_intent.xml
Design a layout with a button, while clicking on it, Capture the picture and show it in an ImageView. Also add a TextView to display URI of the captured picture in it.
CameraIntentActivity.kt
This class is to open the camera app while clicking on a button. Before that, don’t forget to check for permissions of Camera and Storage.
And on onActivityResult(), get the intent data in the form of Bitmap and display that in an ImageView.
More Customization:
Above example is for simpler use like just displaying the captured picture in an ImageView. But in our real-time application, we need more than that. i.e., atleast URI of the captured picture. We can also use custom filepath, where the captured image can be saved.
file_paths.xml
AndroidManifest.xml
CameraIntentActivity.kt
Run Application:
- Get link
- Other Apps
Comments
Can you post source code?
VarangaOfficial — варанга от грибка ногтей отзывы — только достоверные и проверенные факты. Воспользовавшись данным интернет-порталом, вы сможете узнать наиболее полную информацию касательно этого натурального лекарственного комплекса. Лично увидеть данные о проведенных клинических тестированиях, прочитать отзывы реальных покупателей и медицинского персонала. Ознакомиться с инструкцией по использованию, прочесть особенности и методы работы комплекса, уяснить, почему крем Варанга настолько эффективен, где необходимо заказывать оригинальный сертифицированный препарат и, как избежать покупки подделки. Мы тщательно проверяем публикуемые данные. Предоставляем нашим пользователям сведения, почерпнутые только из подлинных источников. Если вы нашли у себя признаки появления грибкового заболевани или же долго и безрезультатно стараетесь излечиться от этого неприятного недуга, наш сайт покажет вам быстрый и легкий способ устранения проблемы. Приобщайтесь и живите здоровой полноценной жизнью. Теперь все ответы можно отыскать на одном сайте.
Источник