Мобильный сканер штрих-кода |
В последние годы QR-коды стали повсеместными. Я уверен, что вы видели его в рекламе в газете или на рекламном щите. С точки зрения непрофессионала, QR-коды, как и все другие штрих-коды, представляют собой изображения, предназначенные для чтения машинами. Обычно они представляют собой небольшую строку, например сокращенный URL-адрес или номер телефона. Последний выпуск SDK сервисов Google Play включает в себя API мобильного зрения, который, среди прочего, позволяет разработчикам Android очень легко создавать приложения, способные обнаруживать и считывать QR-коды в режиме реального времени. В этом руководстве я собираюсь помочь вам начать работу с ним и познакомить вас с библиотекой, которая использует эти и другие функции для вашего использования.
Штрих-код API — Обзор
API штрих-кодов обнаруживает штрих-коды в режиме реального времени на устройстве и в любой ориентации. Он также может обнаруживать несколько штрих-кодов одновременно.
Он считывает следующие форматы штрих-кодов:
- 1D штрих-коды:
EAN-13
,EAN-8
,UPC-A
,UPC-E
,Code-39
,Code-93
,Code-128
,ITF
,Codabar
- 2D штрих-коды:
QR Code
,Data Matrix
,PDF-417
,AZTEC
Он автоматически анализирует QR Codes
, Data Matrix
, PDF-417
а также Aztec values
для следующих поддерживаемых форматов:
- URL-адрес
- Контактная информация (VCARD и т.д.)
- Календарное событие
- Эл. адрес
- Телефон
- смс
- ISBN
- Wi-Fi
- Геолокация (широта и долгота)
- Водительское удостоверение / удостоверение личности AAMVA
Посмотрите это видео, чтобы познакомиться с API штрих-кодов.
Вы также можете попробовать лабораторию кода штрих-кода, чтобы узнать, как интегрировать API штрих-кода в свое приложение.
Практический обзор
Если вы попробовали лабораторию кода штрих-кода , вы также можете просмотреть кодовую базу более сложного примера. . Клонируйте, импортируйте в свой проект и запускайте, чтобы увидеть интересные функции, которые это дает
Лаборатория кода
Предпосылки
Чтобы следовать этому руководству, вам понадобятся:
- последняя версия
Android Studio
- Android-устройство с камерой
Если вы ознакомились с приведенным примером, вы, вероятно, уже знаете, что API мобильного зрения обещает больше. Ну, когда вы создадите второй пример, вы получите что-то похожее на:
С MobileVisionBarcodeScanner вы действительно можете поиграть с этими функциями и включить этот образец в качестве функции в свое приложение.
Что поддерживает библиотека:
- Растровое сканирование
- Пользовательский вид камеры на основе API мобильного зрения
- атрибуты для настройки пользовательского вида камеры
Вот демо:
в том числе в вашем проекте:
добавить в корень build.gradle
в конце репозиториев
allprojects {
repositories {
...
maven { url " }
}
}
добавить зависимость
dependencies {
compile 'com.github.KingsMentor:MobileVisionBarcodeScanner:v1.0'
}
Атрибуты библиотеки.
Чтобы иметь больший контроль над пользовательским представлением, библиотека предоставляет следующие атрибуты:
<attr name="gvb_show_text" format="boolean" />
<attr name="gvb_draw" format="boolean" />
<attr name="gvb_multiple" format="boolean" />
<attr name="gvb_touch" format="boolean" />
<attr name="gvb_auto_focus" format="boolean" />
<attr name="gvb_flash" format="boolean" />
<attr name="gvb_rect_colors" format="reference" />
<attr name="gvb_code_format" format="enum">
<enum name="all_format" value="0"></enum>
<enum name="code_128" value="1"></enum>
<enum name="code_39" value="2"></enum>
<enum name="code_93" value="4"></enum>
<enum name="code_bar" value="8"></enum>
<enum name="data_matrix" value="16"></enum>
<enum name="ean_13" value="32"></enum>
<enum name="ean_8" value="64"></enum>
<enum name="itf" value="128"></enum>
<enum name="qr_code" value="256"></enum>
<enum name="upc_a" value="512"></enum>
<enum name="upc_e" value="1024"></enum>
<enum name="pdf417" value="2028"></enum>
<enum name="aztec" value="4029"></enum>
</attr>
Для чего нужны атрибуты:
gvb_draw
— включить прямоугольное рисование вокруг кодов при сканированииgvb_multiple
— хотите, чтобы камера возвращала столько qr-кодов, сколько было отсканировано. Это работает сgvb_touch
атрибут. он возвращает результат только при нажатии на экран или касанииgvb_touch
— включить сенсорный прослушиватель для экранаgvb_auto_focus
— поддержка автофокусаgvb_flash
— включить вспышкуgvb_rect_colors
— массивы цветов для рисования прямоугольникаgvb_code_format
— формат штрих-кода, который должен поддерживаться. По умолчаниюall_format
Примечание
эти атрибуты также могут быть инициализированы из java code
. Мы рассмотрим это позже
Использование камеры с питанием от Mobile Vision.
Шаг 1 — Добавьте макет в xml:
<fragment
android:id="@+id/barcode"
android:name="com.google.android.gms.samples.vision.barcodereader.BarcodeCapture"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:gvb_auto_focus="true"
app:gvb_code_format="all_format"
app:gvb_flash="false"
app:gvb_rect_colors="@array/rect_color" />
а это rect_color
в colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="color_green">#14808d</color>
<color name="color_brown">#343838</color>
<color name="color_orange">#f38a32</color>
<color name="color_blue">#1479b7</color>
<color name="divider_grey">#e4e4e5</color>
<array name="rect_color">
<item>@color/color_blue</item>
<item>@color/color_brown</item>
<item>@color/color_green</item>
<item>@color/divider_grey</item>
<item>@color/color_orange</item>
</array>
</resources>
Шаг 2 — Инициализировать в java
BarcodeCapture barcodeCapture = (BarcodeCapture) getSupportFragmentManager().findFragmentById(barcode);
barcodeCapture.setRetrieval(this);
также убедитесь, что ваш класс Java реализует BarcodeRetriever
public class MainActivity extends AppCompatActivity implements BarcodeRetriever {
...
@Override
public void onRetrieved(final Barcode barcode) {
Log.d(TAG, "Barcode read: " + barcode.displayValue);
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
.setTitle("code retrieved")
.setMessage(barcode.displayValue);
builder.show();
}
});
}
@Override
public void onRetrievedMultiple(final Barcode closetToClick, final List<BarcodeGraphic> barcodeGraphics) {
runOnUiThread(new Runnable() {
@Override
public void run() {
String message = "Code selected : " + closetToClick.displayValue + "\n\nother " +
"codes in frame include : \n";
for (int index = 0; index < barcodeGraphics.size(); index++) {
Barcode barcode = barcodeGraphics.get(index).getBarcode();
message += (index + 1) + ". " + barcode.displayValue + "\n";
}
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
.setTitle("code retrieved")
.setMessage(message);
builder.show();
}
});
}
@Override
public void onBitmapScanned(SparseArray<Barcode> sparseArray) {
}
@Override
public void onRetrievedFailed(String reason) {
}
}
как вы видете, BarcodeRetriever
Интерфейс обрабатывает обратный вызов при успешном сканировании кода на основе указанных атрибутов.
BarcodeBitmapScanner.scanBitmap(this, bitmap, Barcode.ALL_FORMATS, this);
- Установите атрибуты из java — используйте
BarcodeCapture
экземпляр для ссылки на методы установки
barcodeCapture.setShowDrawRect(true);