Camera extension android что это

У нас есть фотик и котик — работаем с камерой

Практически все современные телефоны и планшеты снабжаются камерами, что позволяет фотографировать любимых котиков.

Сначала сделаем небольшие приготовления. Есть класс устройств, у которых нет камер, например, электронные ридеры. Чтобы пользователи этих устройств не скачивали зря ваше приложение, которое окажется для них бесполезным, пропишем в манифесте требование наличия камеры.

Если камера в вашем приложении выполняет вспомогательную функцию, а приложение может работать и без неё, то установите значение false в предыдущем коде и проверяйте наличие камеры программно. Если камеры нет, то отключайте возможность съёмок для пользователя.

Программное включение приложения Камера

Раньше на старых телефонах можно было программно запустить из своей программы системное приложение «Камера» (в этом случае вам не понадобятся дополнительные разрешения) через намерение.

Особого смысла в этом нет, так как результат не возвращается в приложение. Но вполне подходило для быстрого запуска камеры. Впрочем, сейчас этот код может и не сработать.

А вообще у пользователя могут стоять разные приложения, способные фотографировать. Тогда у вас будет появляться диалоговое окно с выбором нужного приложения. Они все имеют в своём составе такую запись в манифесте (для общего развития):

У Гугла есть своя программа Google Камера. Запустим её, зная имя пакета.

При вызове метода getIntent() вместо new Intent() приложение запускалось сразу, иначе — выводилось диалоговое окно выбора программы из списка. Также нужно быть уверенным, что программа установлена, в примере нет кода проверки.

Делаем фотографии и сохраняем результат. Простой пример

Просто включить камеру не слишком интересно. Рассмотрим практичный пример, когда мы программно запустим приложение «Камера», а полученную фотографию сохраним в папке. Сначала сделаем простой вариант, а потом напишем более сложное приложение.

Используйте статическую константу MediaStore.ACTION_IMAGE_CAPTURE для создания намерения, которое потом нужно передать методу startActivityForResult(). Разместите на форме кнопку и ImageView, в который будем помещать полученный снимок. Этот код запускает стандартное приложение камеры. Полученное с камеры изображение можно обработать в методе onActivityResult():

Не включайте в манифест разрешение на работу с камерой, иначе получите крах приложения.

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

При тестировании примера на своём телефоне я обнаружил небольшую проблему — когда снимок передавался обратно на моё приложение, то оно находилось в альбомном режиме, а потом возвращалось в портретный режим. При этом полученный снимок терялся. Поэтому перед нажатием кнопки я поворачивал телефон в альбомный режим, чтобы пример работал корректно. Возможно следует предусмотреть подобное поведение, например, запретить приложению реагировать на поворот и таким образом избежать перезапуска Activity. У некоторых телефонов такой проблемы нет.

По умолчанию фотография возвращается в виде объекта Bitmap, содержащего миниатюру. Этот объект находится в параметре data, передаваемом в метод onActivityResult(). Чтобы получить миниатюру в виде объекта Bitmap, нужно вызвать метод getParcelableExtra() из намерения, передав ему строковое значение data. В примере использовался упрощённый вариант.

Читайте также:  Reboot system now андроид не включается планшет

Миниатюра и полноразмерное изображение

Если вы укажете исходящий путь URI с помощью параметра MediaStore.EXTRA_OUTPUT в запущенном намерении, полноразмерное изображение, снятое камерой, сохранится в заданном месте. В таком случае в метод onActivityResult() не будет передана миниатюра, а итоговое намерение продемонстрирует значение null.

В следующем примере показано, как при создании снимка получать миниатюру или полноценное изображение, используя намерение. Изображение будет сохранено во внешнем хранилище под именем test.jpg.

Пример работает на устройствах до Android 6.0, потом появились различные системные ограничения и нужно писать дополнительный код.

Добавим разрешение на запись файла в хранилище.

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

Запуск камеры в нужном режиме

Мы можем выбрать намерение, позволяющее включить камеру в нужном режиме: фотосъёмка или видео.

Снимаем и кадрируем

Рассмотрим ещё один пример с режимом кадрирования. Основная часть кода остаётся прежней. Рекомендую проверять работу с камерой на реальных устройствах, так как многие производители заменяют стандартные методы съёмки своими прошивками и драйверами. В частности, намерение с кадрированием является проблемной, и в интернете многие жалуются на отсутствие поддержки этого способа. Пример для старых устройств до Android 6.0.

Создадим простенький макет из кнопки для запуска камеры и ImageView для вывода кадрированного изображения.

Для большей красоты сделаем задний фон у ImageView с закруглёнными углами и обводкой. Для этого в атрибуте android:background мы прописали специальный стиль. Создайте папку res/drawable, а в ней файл background.xml следующего содержания:

Этот шаг не является обязательным и его можно пропустить.

При нажатии кнопки запускаем приложение Камера и ожидаем результата.

После того, как пользователь сделал нужный кадр, программа Камера возвращает результат обратно в наше приложение. Результат обрабатывается в методе onActivityResult():

Получив полноразмерное изображение, мы пытаемся откадрировать его. Для этого создадим метод performCrop(), который запускает специальное намерение, предназначенное для этих целей. В успешном случае результат снова возвращается в наше приложение, но уже с другим кодом PIC_CROP. Теперь мы имеем нужное изображение, которое можно вывести на экран.

При кадрировании мы указываем желаемые размеры (код метода ниже). Если указать слишком больше размеры (больше 400), то результат не возвращается. Попробуйте добавить ещё два параметра:

Результат работы приложения, когда запускается намерение кадрирования и итоговый результат. Желательно тренироваться на кошках.

Источник

Что такое Camera2 API, зачем это нужно и как узнать, поддерживает ли её ваш смартфон

Обилие камер, которыми пестрят современные смартфоны, — это ещё не гарантия хороших фото. Большое значение имеет программное обеспечение, которому зачастую удаётся наделить невероятными возможностями даже проходной и не самый новый модуль. Именно по этой причине стали так популярны порты Google Camera, которая снабжала даже бюджетные смартфоны полноценными ночным и портретным режимами съёмки, а также повышала общее качество снимков, делая их более насыщенными, детализированными и контрастными. Но Google Camera – это только половина успеха. Другая половина – поддержка Camera2 API.

Camera2 API — это своего рода драйвер для камеры смартфона

Думаю, вам не раз приходилось слышать про Camera2 API. Это низкоуровневое ПО, которое является связующим звеном между аппаратным модулем камеры и приложением для фото- или видеосъёмки. Проще говоря, это тот же самый драйвер, который вы устанавливаете на свой Windows-компьютер, чтобы принтер или монитор могли правильно работать.

Что такое Camera2 API

Слева — снимок, сделанный на Gcam, справа — на штатную камеру смартфона. У вас ещё есть вопросы, зачем нужен GCAM?

Но ведь чем-то же Camera2 API уникальна, иначе бы о ней не говорили с таким придыханием. Не так ли? Да, отчасти это действительно так. Camera2 API – это собственная разработка Google, которая открывает приложениям обширный доступ к настройкам камеры вроде ISO, скорости срабатывания затвора, съёмки RAW и т.д. Несмотря на то, что она такая крутая, эта утилита встречается не на всех смартфонах.

Читайте также:  Исходники apk для android

Вообще, существует четыре уровня поддержки Camera2 API. Проще всего объяснять их особенности на примере Google Camera, под которую этот драйвер во многом и разрабатывался.

  • Legacy – присутствует поддержка только устаревшего драйвера Camera API, который использовался до выхода Android 5.0 Lollipop. Она обеспечивает возможность установки Google Camera, но с минимумом доступных функций, то есть, без портретного режима, без Night Shift и т.д.
  • Limited – частичная поддержка Camera2 API, которая позволяет установить Google Camera, но не даёт ей реализовать весь свой потенциал. Функциональность Google Camera при условии ограниченной поддержки может варьироваться от устройства к устройству.
  • Full – полная поддержка драйвера без каких-либо оговорок и ограничений с возможность установки полноценной версии Google Camera.
  • Level_3 – полная поддержка Camera2 API с рядом продвинутых фишек полупрофессиональной направленности. Как правило, они касаются съёмки в RAW и направлены на глубокую подстройку кадра.

Как узнать, есть ли поддержка Camera2 API

Если вы собираетесь установить себе Google Camera, но не знаете, будет ли она поддерживаться на вашем смартфоне или уже это сделали, но не понимаете, почему те или иные фишки не работают, лучше всего вам проверить совместимость с Camera2 API. А сделать это можно при помощи специального приложения.

  • Скачайте приложение Camera2 API Probe из Google Play;
  • Дождитесь окончания загрузки и запустите приложение;
  • Откройте вкладку Camera2 API на самом верху экрана;

Слева — вид поддержки Camera2 API, справа — ограничения

  • Посмотрите на строку Hardware Support Level;
  • Поддерживаемый уровень Camera2 API будет окрашен в зелёный;
  • Чтобы посмотреть ограничения, пролистайте список доступных параметров вниз и посмотрите на красные — это они и есть.

В моём случае это уровень поддержки Limited. То есть большая часть функций Google Camera на моём смартфоне работать не будут. Однако дело тут не в том, что производитель не захотел адаптировать драйвер Google для моего смартфона, а в его аппаратном обеспечении. Всё дело в том, что смартфоны Huawei и Honor – а у меня как раз такой – оснащаются процессорами Kirin, которые сильно отличаются от Snapdragon. А именно под них Google и разрабатывала свой Camera2 API. В результате установить Google Camera на мой аппарат не получится.

Источник

В Android 11 уберут возможность выбора камеры в сторонних приложениях, останется только стандартная

Компания Google убрала из Android 11 возможность выбора приложения для использования камеры в сторонних программах, заметили пользователи Reddit. Разработчики утверждают, что это сделано в целях улучшения безопасности и конфиденциальности владельцев устройств.

Ранее при фотографировании юзеры могли использовать любое приложение для камеры в сторонних программах, например, в соцсетях и мессенджерах. Теперь устройство будет требовать использовать только встроенное приложение для фото. Пользователи обнаружили, что начиная с 11 версии Android только стандартная камера будет реагировать на следующие команды:

Android Police пишет, что Google подтвердила изменения в Android 11. При этом компания ссылается на улучшения безопасности системы, но не указывает, из-за чего выбор сторонних приложений для камеры был опасен для конфиденциальности данных пользователей. Вероятно, злоумышленники могут обманом вынуждать юзеров использовать вредоносные приложения камеры, чтобы с его помощью захватывать изображения, которые должны быть конфиденциальными, полагает Android Police.

В то же время приложения, имеющие собственные инструменты для съёмки — например, Twitter или Instagram — смогут использовать их. Кроме того, пользователи смогут фотографировать и отсылать фотографии через сторонние приложения камеры в обход — сделав снимок и сохранив его, а затем уже выгрузить его из галереи. Также система будет по-прежнему предлагать выбирать приложение камеры через аппаратные инструменты запуска, например, через двойное нажатие на кнопку питания.

Источник

Android CameraX Java Example

May 4, 2020 · 6 min read

In the world of Android, I have felt Camera/Camera2 API is one of the complicated implementation to make it work at our convenience.

Читайте также:  Outlook для андроид как поменять пароль

First it was Camera API, then it was deprecated as Camera2 API came into picture. Whereas there is no much less in difficulty working with the same.

Finally for us, Android Jetpack brought us CameraX API with which the implementation and working with Android Camera can be done easily and very less possible lines of code. CameraX is built on top of the Camera2 API. In this article, we have a simple tutorial of the implementation of CameraX API with JAVA.

As I have browsed through many blogs and tutorials, there are no tutorial of implementing CameraX with Java mainly according to the latest documentation (1.0.0-beta03). That’s the main reason for this article.

Why late, Let’s jump into the code:

Implementing CameraX is a simple 5-step process:
1. Adding Permission in Manifest
2. Adding required Dependencies
3. Adding Camera View and Capture Button in XML
4. Adding Camera M-permission (Realtime permission)
5. Setting up CameraX in Activity

Step 1: Adding Permission in Manifest

First thing to be done is adding the Camera permission to our application manifest

Add Storage permission along with the camera permission as we are saving the captured picture in this example

Step 2: Adding required dependencies in build.gradle (App level)

Right now CameraX is in beta version — 1.0.0-beta03

Step 3: Adding Camera View (PreviewView) and Capture Button in XML

PreviewView (androidx.camera.view.PreviewView) has been introduced by Android team in CameraX. As previously in Camera/Camera2 we used TextureView or customized TextureView (AutoFitTextureView).

As per documentation, PreviewView have some limitations:
Using PreviewView has some limitations.

When using PreviewView , you can’t do any of the following things:

  • Create a SurfaceTexture to set on TextureView and PreviewSurfaceProvider .
  • Retrieve the SurfaceTexture from TextureView and set it on PreviewSurfaceProvider .
  • Get the Surface from SurfaceView and set it on PreviewSurfaceProvider .

If any of these happen, then the Preview will stop streaming frames to the PreviewView .

Step 4: Adding Camera M-permission (Realtime permission)

Below is a method to request Camera and Storage permission, which will be used in onCreate method of the Activity.

Step 5: Setting up CameraX in Activity

As per documentation:
Developers use CameraX to interface with a device’s camera through an abstraction called a use case. The following use cases are currently available:

  • Preview: accepts a surface for displaying a preview, such as a PreviewView .
  • Image analysis: provides CPU-accessible buffers for analysis, such as for machine learning.
  • Image capture: captures and saves a photo.

Use cases can be combined and active concurrently. For example, an app can let the user view the image that the camera sees using a preview use case, have an image analysis use case that determines whether the people in the photo are smiling, and include an image capture use case to take a picture once they are.

In simple words, CameraX currently have three Classes/Use Cases namely Preview, Image Analysis and Image Capture. In these, Preview and Image Capture are mandatory things to be associated whereas Image Analysis is optional.

Creating and Associating the object of these classed/use cases are shown in below code snippet.

So the CameraX Code is as follows.

The deep explanation on each statement used is available in Official Documentation.

Finally, add this code in your onCreate along with the PreviewView and Capture ImageView declaration and initialization:

Credit: Developer.android.com
Image Credit: Google Images

That’s all about the simple tutorial on implementation of CameraX.
If you have any thoughts or questions that you’d like to share, then please do reach out!

Источник

Оцените статью