Как использовать android camera
Все современные смартфоны оборудованы камерами для съемки. Более того, мощность и качество этих камер постоянно растет. Уже сейчас очень многие люди вполне могут отказаться от фотоаппаратов, как отдельных устройств (хотя, конечно, смартфонам до них еще далеко) так как их вполне устраивают снимки полученные на мобильную камеру.
Существует масса приложений в которых происходит работа с камерой устройства и в этом уроке мы тоже научимся использовать камеру устройства в своих приложениях.
Создаем новый проект, берем Blank Activity. Сразу давайте импортируем в проект нужные строки:
Они позволят нам делать захват изображения, его сохранение и высвечивать на экран пользователя.
Теперь давайте добавим строковые ресурсы, которые будут использоваться в приложении. Открываем файл strings.xml и добавляем туда строки:
Перейдем к работе над интерфейсом программы. Открываем файл activity_main.xml. Нам нужно создать 3 элемента: TextView, кнопку для запуска камеры Button и элемент для отображения фото ImageView:
Для ImageView установлен фон @drawable/border и эта строка сейчас подсвечивается красным, потому, что такого файла border у нас пока нету. Его нужно создать. Этот файл будет задавать вид для ImageView. Для того, чтобы он корректно отображался во всех возможных случаях, этот файл нужно создать для каждой папки drawable (то есть, drawable, drawable-hdpi, drawable-mdpi, drawable-xhdpi, drawable-xxhdpi). Сделаем так, создаем файл border.xml в папке drawable. Он будет содержать следующее:
Получился вот такой вот вид:
Берем этот код, копируем в блокнот, создаем в каждой из drawable папок, указанных выше, файл border.xml и кидаем в них этот же код (ищем эти папки вручную в файлах приложения и вручную создаем файлики).
На данный момент интерфейс нашей программы выглядит так:
Добавим нашей кнопке в activitymain.xml нажатие:
И добавим метод описания этого нажатия. Ставим курсор на «Photo», жмем Atl+Enter и выбираем верхнюю строку:
Переходим к работе в файле MainActivity.java. В методе onCreate заявляем о существовании нашей кнопки:
Теперь переходим к самому интересному — настроим запуск камеры по нажатию на кнопку»Запустить камеру». До метода onCreate задаем использование следующих переменных:
В методе Photo (обработки нажатия) добавляем намерение использовать камеру и работать с полученными с нее данными:
Когда будет выполняться эта часть кода, будет запускаться камера и пользователь может сделать фото. Но нужно также предупредить ситуацию, когда устройство пользователя не может выполнять это действие, сделаем это с помощью всплывающего сообщения Toast (вспоминаем урок:)). Для этого добавляем в методе Photo следующее:
Следующим шагом нужно научить программу извлекать полученное камерой изображение. Ниже метода «Photo» добавляем метод onActivityResult (ставим курсор на пространство ниже метода «Photo», жмем на панели программы Code — Override Methods, начинаем вводить имя метода, подсказки вам его укажут). Добавляем в него следующее:
Сейчас строка cropImage(); подсвечена красным, ставим на нее курсор и Android Studio предлагаем нам создать метод cropImage, соглашаемся:
Переходим к работе в этом методе. Добавляем сюда намерение работы с изображением, учтем, как и выше, случаи когда устройство не поддерживает таких функций:
Дальше добавляем код, который будет указывать приложению извлекать изображение после его захвата (извлечение данных с камеры в приложение) , задавать захваченному камерой изображению различные характеристики:
Ну и под конец, нужно настроить отображение полученного с камеры изображения. В методе ‘onActivityResult’ после оператора if добавим оператор else, в котором опишем действия для программы по возвращению от действий захвата изображения:
И добавляем в этот оператор следующий код:
Чтобы вы не потеряли ничего с необходимого кода, вот весь код файла MainActivity.java:
Все готово! Приступаем к тестированию приложения. Как вы поняли, тест на эмуляторе ничего не даст, нужно устройство с реальной камерой.
Источник
Полный список
— получаем фото и видео, используя системное приложение
Открываем серию уроков по работе с камерой. И начнем с самого простого. Если вам в приложении необходимо сделать снимок или снять видео, вовсе необязательно для этого создавать отдельное 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 смартфон как вебкамера/микрофон/динамики для ПК
Вебкамера
Очень захотелось мне прикрутить на эмулятор android для ПК под Windows камеру(надо было считать qr код, но это тема отдельной статьи), поиски в интернете выдали только одно достойное бесплатное ПО.
DroidCam Wireless Webcam (google play бесплатная и платная версии) — приложение для смартфона и клиент для Windows (со встроенным в инсталлятор драйвером для виртуального устройства) и Linux, которое позволяет использовать android смартфон в качестве видео камеры ПК, соединяясь через USB или WI-FI. Сайт проекта, там можно скачать ПО, здесь зеркало (клиент для Windows). Дополнительную информацию можно найти на 4pda.
Для начала использования надо установить и открыть программы на смартфоне и ПК.
Для USB подключения необходимо:
выбрать соответствующий тип подключения в приложении Windows (синяя рамка, средняя кнопка)
подключить смартфон к ПК по USB
в приложении Windows нажать Start
При Wi-Fi подключении(смартфон и ПК должны быть подключены к одной сети)видео можно просматривать из клиентской программы либо из браузера, 2 подключения недопустимы.
Лого проекта DroidCam
Для начала подключения по Wi-Fi надо выбрать способ подключения (синяя рамка, левая кнопка). Затем:
Для подключения через клиентскую программу необходимо в ней указать IP смартфона в сети (красные стрелки) и порт;
Для подключения через браузер необходимо в адресной строке браузера набрать адрес (зеленый прямоугольник).
Слева приложение для Windows, справа для andriod смартфона
В обоих случаях если что-то не получается можно попробовать покрутить настройки портов.
Микрофон
При переходе на удаленную работу возникала необходимость голосовой связи через ПО. Микрофон встроенный в ноутбук выдавал ужасное качество, поэтому было решено попробовать смартфон в качестве микрофона. Искать соответствующее ПО пришлось не долго, а звук оказался достаточно качественным(несмотря на то что в работе участововал ультрабюджетник Lenovo A5).
Wo Mic (Google Play, App Store) это бесплатное приложение для сматрфона и клиент для Windows и Linux, драйвер для виртуального устройства. Все ПО можно скачать на сайте проекта, есть еще зеркало здесь (apk, windows клиент, драйвер). Дополнительную информацию можно найти на 4pda.
Приложение позволяет коннектиться по USB (необходима отладка по USB), Bluetooth, WI-FI.
Для начала нужно все установить, порядок установки драйвера и клиента для Windows не имеет значения.
Лого проекта Wo Mic
Чтобы начать использовать смартфон как микрофон, необходимо:
запустить программу на смартфоне (и нажать кнопку ▶)
запустить программу на ПК (в меню выбрать «Подключение» — подключиться — выбрать нужный тип подключения и следовать инструкции).
Динамики
Некоторое время у меня на ноутбуке не работали динамики (не правильно собрал) … но этот раздел статьи я добавил лишь для полноты картины :)Мне повезло, у меня была Bluetooth колонка, но неизвестно как будет следующий раз, больше шансов что будет только смартфон.
SoundWire (google play) — бесплатное приложение для android смартфона и программа для Windows (точнее ПК Windows здесь выступает сервером, а смартфон клиентом) для транслирования звука с ПК на смартфон. Сайт проекта где можно скачать необходимое ПО. Зеркало здесь (apk, windows клиент). Дополнительную информацию можно найти на 4pda.
Лого проекта SoundWire
Для трансляции звука с ПК на android устройство необходимо чтобы они были в одной сети, могут быть разные варианты:
использовать смартфон как (этот способ создает локальную сеть):
USB модемBluetooth модем точку доступа Wi-Fi
подключиться к Wi-Fi сети в которой находится ПК
В первом случае смартфон будет выступать источником доступа в интернет, но некоторые провайдеры мобильной связи блокируют эту возможность. Самый простой способ это отключить мобильный интернет на смартфоне, при этом соединение с ПК останется, так как это в первую очередь локальная сеть. Либо можно поменять ttl, но это путь джедаев.
В любом случае в Windows приложении в строке Server Address будет IP адрес, который нужно будет указать в android приложении, после чего нажать на кнопку соединения (выделено синим).
Слева программа для ПК под управлением Windows, справа android приложение, IP адрес переносим слева направо
Источник