Библиотека сканера Android QRCode

Что у нас есть (если что-нибудь), что мы можем запросить для обнаружения и извлечения QR-данных на изображении?

Хотя до сих пор было много сообщений, ссылающихся на библиотеку ZXing для сканирования QRCode, я не обнаружил, что это решение подходит мне. Несколько других просили альтернативы сканирования QRCode, и я не видел полезных отзывов. Я подумал, что мог бы спросить сообщество еще раз, какие другие варианты могут быть для библиотеки QR-кода, которая не запускает действие и не вызывает вне наших собственных приложений. Он должен сканировать изображения из Camera2 API очень упрощенным способом. Это не должно быть сложной библиотекой. Я не видел примеров или людей, говорящих об этом таким образом.

На самом деле меня удивляет, почему не было встроенных реализаций функции QRCode, добавленной, возможно, в библиотеку Camera или подобное место в Google SDK, встроенное в операционную систему.

Вызов и требование другого приложения (или даже запрос на загрузку) не является элегантным решением, и никакие пользователи не должны поддаваться на такие действия. Как разработчики, мы должны иметь доступ к библиотеке, способной извлечь QRCode из изображения или фрейма, из которого мы можем затем удалить закодированные данные.

Ответ 1

В то время как Шон Оуэн и другие, которые работали над оригинальной библиотекой Zxing, в течение последних нескольких лет поддерживали работу с библиотеками штрих-кода, Google наконец выпустил официальный выпуск в Google Play Services для обработки qr и штрих-кодов.

Здесь описывается библиотека обнаружения штрих-кода. Включение этих библиотек обеспечит плавную интеграцию. Я отвечу с некоторым примером кода для достижения этих результатов из захваченного изображения. На данный момент я хотел обновить свой ответ для официального релиза. Если это действительно дает хороший способ получить эту информацию (без прыжков через обручи и осложнения), я обновляюсь с источником и проверяю это как принятый ответ.

Библиотека обнаружения, которую Google предоставила в течение прошлого года, была гораздо более простой библиотекой для работы. Это позволяет быстро интегрироваться с API-интерфейсом камеры и извлекает информацию с простотой. Это будет компонент, который я бы предложил продолжить с признанием. Ниже приведено краткое описание для обработки Qr-кода. Здесь также остается несколько псевдокодов.

public final void analyzeFrameForQrCode(byte[] qrCodePictureF, int imageFormatF, XriteSize previewWindowSizeF)
{
    if(!qrCodeDetectionPossible() || qrCodePictureF == null || mIsAnalyzingQrCodeFrame)
    {
        return;
    }

    ... //Bitmap conversion code

    Frame frame = new Frame.Builder().setBitmap(pictureTaken).build();
    SparseArray<Barcode> barcodes = mBarcodeDetector.detect(frame);
    if(barcodes != null && barcodes.size() != 0)
    {
        Barcode qrCode = barcodes.valueAt(0);//barcodes.get(Barcode.QR_CODE);
        if(qrCode != null)
        {
             if(extractInformationFromQrCode(qrCode.rawValue)) {
                    mIsRequestingBarcodeDetection = false;
                    vibrateForQrCodeDiscovery();
                    ((Activity)mContext).runOnUiThread(new Runnable() {
                        @Override
                        public void run()
                        {
                            hideBarcodeDetection(true);
                        }
                    });
                }
            }
        }

     ... //Cleanup and code beyond Qr related material

   } 
}

Есть, конечно, другие доступные звонки, которые можно использовать. Но там действительно только пара строк. Однако служба для анализа фреймов с библиотекой по умолчанию не используется на устройствах. Таким образом, вы должны проверить, доступна ли библиотека (например, когда Интернет недоступен), перед расчетом. Это небольшая неприятность. Я предположил, что он будет доступен как обновления для устройств, идущих вперед в рамках библиотеки поддержки или служб Google, выходящих на все устройства. Но для связи с этими библиотечными вызовами сначала требуется связь с внешней службой. Как только он делает это один раз, тогда это устройство хорошо с этого момента.

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

if(!mBarcodeDetector.isOperational())
{
    updateUserInstructions("The barcode library cannot be downloaded");
    return false;
}

Изменить (обновить):

Значительное количество времени прошло с момента работы с новейшими библиотеками Google Play Services Vision, доступными для обнаружения штрих-кода. Хотя ограничение на необходимость загрузки библиотеки через Wi-Fi действительно является ограничением, это одноразовый процесс. И давайте будем честными...

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

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

Ответ 2

Библиотека сканера QRCode для Android

Это может помочь вам, эта библиотека не требует загрузки или использования каких-либо внешних приложений. Мы можем напрямую интегрировать это в ваше приложение и использовать его для сканирования QR-кода.

https://github.com/dm77/barcodescanner

Эта вики поможет вам интегрироваться с вашим приложением,

https://github.com/dm77/barcodescanner/blob/master/README.md

Ответ 3

Вы также можете проверить MobileVisionBarcodeScanner. Он работает от API мобильного зрения Google. Также см. Обзор здесь.

Ответ 4

Я использовал эту библиотеку в своем приложении. Он также работает с xing, но вам не нужны сторонние приложения. Дополнительно он очень прост в использовании.

https://github.com/journeyapps/zxing-android-embedded

Возможно, вы искали что-то вроде этого.

Ответ 5

Вы уже нашли нужную библиотеку, я думаю. См. Модуль core/:

https://github.com/zxing/zxing/tree/master/core

Вы просто смотрите на интеграцию на основе Intent, но на самом деле основное сканирование - это отдельная автономная библиотека, которую вы можете встроить в собственное приложение.

Я думаю, что интеграция с интеграцией на основе Intent лучше всего в большинстве случаев, просто потому, что она настолько проста, и большинство людей не имеют времени, чтобы переопределить свой собственный интерфейс сканирования и т.д. поверх ядра. На большинстве устройств уже установлен сканер штрих-кода, поэтому обычно загрузка не требуется.

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

Ответ 6

Вместо интеграции библиотеки QRCODE ZXing Вы можете открывать камеру и сканировать QRCode из любого места: Код, который я нашел ниже, может помочь вам в сканировании QRCode:

try {
                Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); // "PRODUCT_MODE for bar codes
                startActivityForResult(intent, 0);
            } catch (Exception e) {    
                Uri marketUri = Uri.parse("market://details?id=com.google.zxing.client.android");
                Intent marketIntent = new Intent(Intent.ACTION_VIEW,marketUri);
                startActivity(marketIntent);
            }

Пожалуйста, помните, что у вас должно быть приложение сканера штрих-кода от "Zxing" на мобильном телефоне, иначе он сначала перенаправит ссылку на Google Play Store, чтобы загрузить его.