Ответ 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 действительно является ограничением, это одноразовый процесс. И давайте будем честными...
... у наших устройств будет соединение. Сама библиотека загружается в фоновом режиме, поэтому вы даже не замечаете, что это происходит, если нет проблем с ее загрузкой, и тогда вам придется сообщать о соответствующих корректирующих мерах, таких как подключение к Интернету для него.
Еще один лакомый кусочек заключается в том, что иногда немного сложно понять, как вы интегрируете библиотеку в свое приложение. Использование его в качестве библиотечного проекта работало на некоторых устройствах, а затем проваливалось на других. Добавление банки в путь сборки, работающее на более широком количестве устройств (это может быть все, но это решило проблему). Таким образом, я бы сделал это с использованием вторичного метода, когда вы включили его в свои проекты.