Отсканировать QR-код на Андроид устройстве можно несколькими способами: скачав специальное приложение через Play Market или воспользовавшись встроенным в ОС инструментом для считывания кодов.
QR-код (англ. Quick Response Code – код быстрого реагирования; сокр. QR code) – матричный (двумерный) штрихкод, разработанный японской компанией Denso-Wave в 1994 году. Первоначально эти коды использовались в автомобильной промышленности для быстрого учета информации о производстве и реализации авто.
Сейчас же изображения с черными квадратиками можно найти на:
- чеках кассовых аппаратов;
- авиа- и ж/д билетах;
- табличках в музеях, памятниках архитектуры, монументах;
- в метро;
- меню кафе и ресторанов;
- на товарных упаковках;
- квитанциях коммунальных платежей.
QR-код удобен тем, что позволяет в одной картинке зашифровать несколько тысяч символов. При этом само изображение для сканирования может быть как маленьким сантиметровым квадратиком, так и довольно крупной картинкой, размещённой на плоской поверхности.
В настоящее время QR-коды широко распространены в странах Азии, Европе и Северной Америке. В России они появились сравнительно недавно, но активно используются в сферах товаров и услуг.
Способы отсканировать код
Для того, чтобы оплачивать счета и получать достоверную информацию о тех или иных культурных объектах, не нужно носить с собой специальный сканер штрихкодов. На самом деле, необходим минимум средств: смартфон с основной или фронтальной камерой и софт, способный отобразить данные, зашифрованные в картинке.
Программы
Наиболее популярные приложения для считывания QR-кодов:
- «Сканер QR и штрих-кодов» от Gamma Play.
- «QRcode» от YUNteam.
- «Сканер QR-кодов» от InShot Inc.
Работать с мобильными сканерами очень просто:
- Скачиваем приложение на смартфон.
- Открываем программу.
- Направляем камеру на QR-код.
- Получаем информацию о товаре или копируем веб-ссылку для перехода на сайт.
Большинство приложений позволяют настраивать процесс сканирования, а также позволяют просмотреть историю ранее отсканированных кодов.
Что потребуется для сканирования QR-кода на ОС Android
Матричные штрих-коды прочно вошли в нашу жизнь. Первоначально кодировка применялась в автомобилестроении, но затем перекочевала и в другие отрасли. Сейчас QR-кодами маркируются:
- железнодорожные и авиабилеты;
- кассовые чеки;
- таблички достопримечательностей;
- ресторанные меню;
- товарные упаковки;
- коммунальные квитанции.
Чтобы добыть требуемую информацию, вам потребуется современный смартфон, оборудованный камерой и простеньким софтом. Даже при использовании фронтальной камеры на своем устройстве вы достигнете желаемого. Неоценимую помощь окажут приложения, выпущенные компаниями Gamma Play, InShot Inc и YUNteam.
Встроенные приложения на Андроид
Некоторые производители смартфонов, занимающиеся разработкой собственных Андроид оболочек, внедряют в них инструменты для считывания QR-кодов. Их не нужно устанавливать через магазин приложений – программы предустановлены в систему и практически не занимают места на телефоне.
Xiaomi
На смартфонах Xiaomi есть приложение “Сканер”, которое по умолчанию располагается в папке “Инструменты” или в дополнительном меню слева от основного экрана.
Всё, что нужно сделать – запустить инструмент и разместить код внутри рамки для сканирования. Если код правильный и камера хорошо сфокусировалась на изображении, то на дисплее должна высветиться вся зашифрованная в картинке информация, которую можно использовать по своему усмотрению.
Особенностью сканера от Xiaomi является возможность сканирования любой фотографии из Галереи на наличие QR-кода.
Huawei
У смартфонов Huawei есть очень удобная функция вывода на заблокированный экран нескольких инструментов для быстрого открытия. Сканер QR-кода – в их числе.
Для того, чтобы открыть сканер с заблокированного устройства, нужно:
- Свайпнуть снизу вверх от нижнего края заблокированного экрана, в результате чего внизу появляется меню инструментов.
- Выбрать в списке значок сканера.
Далее наводим камеру на QR-код, ждём, пока инструмент расшифрует изображение и смотрим результат. Однако для получения полной информации нужно разблокировать смартфон.
В разблокированном телефоне найти сканер можно в меню быстрого поиска приложений. Для этого на главном экране делаем свайп от центра экрана вниз и нажимаем на значок сканера, расположившийся в строке поиска.
В оболочке EMUI также присутствует возможность сканирования фото с QR-кодом. Чтобы ею воспользоваться, нужно зайти в Галерею, выбрать фото, на котором есть штрих-код, нажать на кнопку «Ещё» и в высветившемся меню выбрать «Отсканировать QR-код».
Samsung
На устройствах компании Samsung сканер – встроенная в стандартную камеру функция, и для того, чтобы код считался, нужно лишь навести на него объектив. Но если автоматическое распознавание не сработало, нужно активировать специальный режим. Для этого:
- Переходим в приложение «Камера».
- Заходим в дополнительные настройки.
- Выбираем режим сканера.
Таким образом можно получить информацию с QR-кода на всех современных моделях Samsung.
Генерируем и сканируем QR/BAR коды
В статье приводится короткий пример, как встроить в своё приложение генератор и/или сканер QR кодов (или штрих-кодов), и тем самым облегчить себе задачу передачи с устройства на устройство коротких объемов информации. QR-коды пришли на смену устаревшим штрих-кодам (далее вместо ‘Bar code’) и все плотнее входят в нашу жизнь, их используют в десятках различных решений от передачи ссылок на сайт, до сложных систем авторизаций и покупок. Подробно узнать что такое QR-код можно в подробностях узнать из статьи Читаем QR код
Для выполнения поставленой задачи нам понадобится 2 библиотеки из двух проектов:
- ZBar bar code reader
- ZXing («Zebra Crossing»)
Сканируем QR-коды
Для сканирования будут использоваться библиотеки из ZBar bar code reader
, итак поехали:
- Добавить в проект zbar.jar
- Добавить в проект native библиоткеки libiconv.so и libzbarjni.so отвечающие за анализ и распознавание картинки с камеры в реальном времени.
- Загружаем native библиотеки в память static { System.loadLibrary(«iconv»); }
- Инициализируем сканер scanner = new ImageScanner(); scanner.setConfig(0, Config.X_DENSITY, 3); //почему именно эти параметры нигде не указано scanner.setConfig(0, Config.Y_DENSITY, 3);
- Дальше передаем сканеру каждый новый кадр из превью камеры PreviewCallback previewCb = new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera camera) { String lastScannedCode; codeImage.setData(data); int result = scanner.scanImage(codeImage); if (result != 0) { SymbolSet syms = scanner.getResults(); for (Symbol sym : syms) { lastScannedCode = sym.getData(); } } } }
- В результате в lastScannedCode
мы получаем распознанный код.Тут есть одна особенность, result = scanner.scanImage(codeImage)
иногда возвращет корректный результат, даже когда нет никакого QR-кода перед камерой. То есть, камера иногда распознает что то даже в обычной размытой картинке. Поэтому рекомендую ввести дополнительную проверку на размер прочитанного кода или на соответствие ожидаемому формату.
Генерируем QR-коды
В этом случае уже будут задействованы ресурсы библиотеки ZXing
. Входные парамеры
encodeAsBitmap
: текст или код для кодирования, стандарт в который мы кодируем, размеры картинки на выходе. Bitmap barcode_bitmap = encodeAsBitmap(text, BarcodeFormat.QR_CODE, 200, 200); targetImageView.setImageBitmap(barcode_bitmap); private static Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int img_width, int img_height) throws WriterException { String contentsToEncode = contents; if (contentsToEncode == NULL) { return NULL; } Map hints = NULL; String encoding = guessAppropriateEncoding(contentsToEncode); if (encoding != NULL) { hints = new EnumMap(EncodeHintType.class); hints.put(EncodeHintType.CHARACTER_SET, encoding); } MultiFormatWriter writer = new MultiFormatWriter(); BitMatrix result; try { result = writer.encode(contentsToEncode, format, img_width, img_height, hints); } catch (IllegalArgumentException iae) { // Unsupported format return NULL; } int width = result.getWidth(); int height = result.getHeight(); int[] pixels = new int; for (int y = 0; y < height; y++) { int offset = y * width; for (int x = 0; x < width; x++) { pixels = result.get(x, y) ? BLACK : WHITE; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; }
Что на счёт Штрих-кодов?
Сканер понимает все виды штрих-кодов без каких-либо модификаций, из коробки
.
Генератор же модифицируется не просто, а очень просто: в функцию encodeAsBitmap
передаем в поле
format
вместо BarcodeFormat.QR_CODE, что нибудь вроде BarcodeFormat.CODE_128, что будет соответствовать штрих-коду стандарта Code 128
Пару советов напоследок
Имейте ввиду, что работа с камерой может иметь свои особенности на разных платформах
Замечено, что метод public void onPreviewFrame(byte[] data, Camera camera) { codeImage.setData(data); …. } постоянно теряет память (есть Memory Leak) ввиду того что буфер кадра постоянно создается и очищается на каждом новом превью кадре с камеры. Для того, что бы этого избежать, есть возможность использовать CallbackBuffer для выделения статичного буфера под превью кадры. Это действительно помогает избавится от утечек памяти и даже увеличивает фрейм-рейт у превью картинки с камеры. Но!
, нашлась модель телефона, которая ни в какую не захотела работать с превью буфером и не факт что не найдутся еще, поэтому оставил в примере более надежный способ.
Генерация штрихкодов имеет ограничения согласно выбранному стандарту: максимальный размер в байтах, разрешенные смиволы и т.д. Изучите особенности линейных штрикодов, для того что бы обеспечить совместимость отображаемых вами штрих-кодов с магазинными сканерами
Тем, кто собирается использовать .so библиотеки в проектах использующих билд систему Gradle, шаги следющие: создаем jar файл iconv.jar со следующей структурой:
- lib/
- lib/x86
- lib/armeabi
- lib/armeabi-v7a
и добавляем в его секцию dependencies
compile files(‘libs/iconv.jar’) Либо, более универсальный вариант, что бы не описывать все JAR файлы по-отдельности: dependencies { compile fileTree(dir: ‘lib’, include: ‘*.jar’) }
UPD. Залил исходники на GitHub Что получилось на выходе проекта (Генератор и Сканер в одном флаконе):
Создаем свой QR-код
Для создания собственного QR-кода можно использовать различные инструменты или онлайн генераторы. Наиболее популярные сервисы:
- https://qrcoder.ru.
- https://ru.qr-code-generator.com.
- https://goqr.me.
- Приложение «AndQR — Создание QR-коды».
- Приложение «QR-генератор кода».
Сначала необходимо выбрать, какую функцию должен выполнять генерируемый код и ввести информацию, которую необходимо зашифровать. Далее выполняется индивидуальное оформление кода – цветовое оформление и логотип.
У каждого сервиса есть свои настройки и ограничения, с которыми стоит ознакомиться перед началом работы.
Что делать, если не сканирует на Андроид?
В случае, если все выполнено, а сканер не работает, попробуйте сделать следующее:
- Проверьте на другом объекте, возможно штрих поврежден.
- Если предыдущий пункт также не работает, поменяйте приложение или обновите его (если есть пакет обновлений).
- Все вышеуказанные меры предприняты и не работает? Проверьте камеру на наличие повреждений, пыли и т.д.
- Обновите Android.
Иногда причина кроется в каких-то мелочах, возможно, одно из установленных приложений дает сбой и вызывает конфликт. В случае большого количества приложений, узнать, какое именно сбоит – сложно. В такой ситуации, проще сохранить все данные на внешний носитель и сбросить устройство до заводских настроек. Многие другие вопросы и о том, что такое QR код, подробно описано в другой моей статье, поэтому welcome к прочтению.
Что делать, если код не сканируется
В случае, если смартфон не распознаёт QR-код и не хочет отображать зашифрованную в нём информацию, нужно:
- Попробовать отсканировать код под другим освещением, настроив фокусировку.
- Перезапустить приложение для считывания или полностью его переустановить.
- Перезагрузить смартфон.
Также стоит отметить, что программы не считывают повреждённые и плохо напечатанные QR-коды.
QR-коды постепенно внедряются в повседневную жизнь людей, значительно улучшают и упрощают быт. Именно для этого компания Denso-Wave и изобрела их – для простоты и удобства в получении нужной информации.
Полезно 9
↑ Какие приложения считывают rq-код?
Способ сканирования зависит во многом от модели смартфона. Так, например, на Samsung не нужно скачивать приложение, так как сканер уже встроен в прошивку. Если у вас флагман этого года, то поищите сканер в своем телефоне. Если не нашли, перейдите в play маркет — вас ждет более 50 программ, которые считывают штрих-коды. Принцип работы у всех практически одинаков.
К самым популярным стоит отнести:
- Молния qr-сканер
— плюсы: быстрая скорость, русский интерфейс, простое управление, отсутствие рекламы;с Play Market
- QR сканер штрих-кода
– позволяет не только читать коды, но и самостоятельно создавать их;с Play Market
- QR Code & сканер
— помимо считывающей способности, может «прятать» текущую гео локацию, контактные данные и не только.с Play Market
Как работают приложения-сканеры QR и штрих-кодов
Чтобы понять каким образом получают информацию сканеры, необходимо разобраться, что представляют собой штрих и QR-код.
Штрих-код
Штрих-код — это чередование черных и белых полос разной толщины. Иногда используют черно-белую последовательность других фигур. В привычном нам линейном штрих-коде комбинация из 4-х полос различной толщины кодируется в цифры от 0 до 9. Существует множество разновидностей штриховых кодов, в том числе и сложные, в которые можно вписать не только цифры, но еще и весь английский алфавит с некоторыми специальными символами.
Программа-сканер для Андроид с помощью камеры распознает штрих-код на попавшем в область сканирования участке изображения. Затем проводит по нему горизонтальную линию и извлекает закодированные символы. Полученный результат отображает на дисплее. После чего приложение отправляет запрос в виде комбинации цифр в базу данных, где и находит нужный товар.
QR-код
В отличие от линейного штрих-кода, где значимой областью кодирования является только горизонтальная черта, QR-код является двумерной матрицей. Визуально – это квадрат, заполненный черными и белыми участками, различные комбинации которых собираются в значимые модули. Соответственно, информация записана по всему периметру изображения.
Большие квадраты по углам изображения нужны, для ориентации. Простой пример: нарисуйте квадрат на листе бумаге, расставьте по его периметру точки, поверните рисунок и попросите другого человека определить первоначальное положение квадрата. Это окажется весьма затруднительно. Таким образом может быть повернуто и исходное изображение кода. Разметка квадратам позволяет определить правильное расположение графического рисунка.
Сканер QR кода для Android распознает границы изображения, разбивает его на модули, а затем сопоставляет картинку с базой данных. А дальше, приложение действует в зависимости от того, что было зашифровано в коде, а также от функциональных возможностей программы.