Каков предпочтительный способ встраивания библиотеки zxing для обеспечения сканирования без установки приложения Barcode Scanner? Я хочу встроить его в Android, не запрашивая у пользователя никаких дополнительных установок. (Аналогично тому, как работает iPhone src).
Встроить библиотеку Zxing без использования приложения Barcode Scanner
Ответы (7)
На самом деле проще интегрировать через Intent. Более надежный, и вы получаете обновления автоматически. Пока не советую...
Полный исходный код доступен в проекте ZXing. Вы хотите собрать core.jar
из core/
и поместить его в папку Android lib/
, чтобы включить основной декодер в свое приложение. Вы не хотите включать javase
. Вы можете просмотреть код в android/
, так как он является исходным кодом для сканера штрих-кода, но как авторы мы предлагаем вам не просто копировать и вставлять его.
Это лицензия Apache, что означает, что вы можете использовать его свободно, если вы по существу предоставить пользователю доступ к условиям лицензии.
core.jar
. Все приложение для Android также доступно для повторного использования (и иногда неэтично копируется). Я не уверен, что может быть проще.
- person Sean Owen; 05.08.2011
core.jar
в папке Core .. Где я могу его найти?
- person ; 29.05.2013
core.jar
выходит 126 Мб. Это довольно много для приложения для Android. Имеет ли это смысл?
- person CodyBugstein; 07.10.2014
core
в zxing-master
со страницы Github.
- person CodyBugstein; 07.10.2014
core
ты говоришь?
- person CodyBugstein; 10.10.2014
Android QR/штрих-код/мультиформатный декодер.
Я сделал приложение для Android, используя API-интерфейсы ZXing, и внедрил в свое приложение только код декодирования. Ввод в этот декодер осуществлялся через SD-карту эмулятора Android.
Вот шаги:
Сначала я создал AVD (эмулятор) версии 4 в Eclipse IDE с включенными функциями SD-карты и камеры.
Затем я создал SDCard, используя приведенные ниже команды в командной строке:
c:\>mksdcard 40M mysdcard.iso
где 40M — размер SD-карты, которую я создал. Она будет сохранена на диске C:. Обратите внимание, что часть .iso важна.
Затем нам нужно смонтировать SD-карту в эмулятор, используя приведенные ниже команды в командной строке:
c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
Здесь myavd4 — это имя виртуального устройства эмулятора/андроида, которое я создал на шаге 1. Знак «@» перед именем avd также важен.
Держите эмулятор работающим все время. Если он закроется, нам придется повторить 3 вышеуказанных шага.
Мы можем отправить QR-код или другие изображения кода, которые у нас есть, на эту SD-карту, установленную на нашем эмуляторе, с помощью приведенных ниже команд в командной строке:
c:\>adb push "c:\myqrcode.png" /sdcard
Затем в Eclipse IDE запустите новый проект Android. Код ниже нужно вставить в файл QRDecoder.java нашего проекта.
package com.example.palani; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import com.google.zxing.ChecksumException; import com.google.zxing.FormatException; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.NotFoundException; import com.google.zxing.Reader; import com.google.zxing.Result; import com.google.zxing.ResultPoint; import com.google.zxing.client.androidtest.RGBLuminanceSource; import com.google.zxing.common.HybridBinarizer; public class QRDecoder extends Activity implements OnClickListener { public static class Global { public static String text=null; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Bitmap bMap = BitmapFactory.decodeFile("/sdcard/myqrcode.png"); TextView textv = (TextView) findViewById(R.id.mytext); View webbutton=findViewById(R.id.webbutton); LuminanceSource source = new RGBLuminanceSource(bMap); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new MultiFormatReader(); try { Result result = reader.decode(bitmap); Global.text = result.getText(); byte[] rawBytes = result.getRawBytes(); BarcodeFormat format = result.getBarcodeFormat(); ResultPoint[] points = result.getResultPoints(); textv.setText(Global.text); webbutton.setOnClickListener(this); } catch (NotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ChecksumException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onClick(View v) { Uri uri = Uri.parse(Global.text); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } }
Затем я скачал исходный код ZXing (ZXing-1.6.zip) по ссылке ниже.
http://code.google.com/p/zxing/downloads/list
Затем распакуйте его и перейдите в папку D:\zxing-1.6\core\src\com.
скопируйте папку com и вставьте ее в наш пакет в Eclipse.
(Обратите внимание, щелкните правой кнопкой мыши пакет нашего проекта и вставьте... если он попросит заменить существующую папку, выберите «Да»)
Затем скопируйте и вставьте приведенный ниже код в файл res/layout/main.xml.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="20dip" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/mbackground1" android:gravity="center_horizontal" android:text="@string/decode_label" android:padding="20dip" /> <TextView android:id="@+id/mytext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:background="@color/mbackground2" android:textColor="@color/mytextcolor" android:padding="20dip" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/continue_label" android:gravity="center_horizontal" android:textColor="@color/mytextcolor" android:padding="20dip" /> <Button android:id="@+id/webbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/web_button" android:textColor="@color/mytextcolor" /> </LinearLayout>
Затем скопируйте и вставьте приведенный ниже код в файл res/values/strings.xml.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, QRDecoder!</string> <string name="app_name">QRDecoder</string> <string name="continue_label">Click below to load the URL!!</string> <string name="web_button">Load the URL!!</string> <string name="decode_label">Decoded URL</string> </resources>
Затем скопируйте и вставьте приведенный ниже код в файл res/values/color.xml, если он не существует, создайте его.
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="mbackground1">#7cfc00</color> <color name="mbackground2">#ffff00</color> <color name="mytextcolor">#d2691e</color> </resources>
Затем скопируйте и вставьте приведенный ниже код в файл манифеста после открывающего тега.
<manifest> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Итак, вышеописанные шаги выполнены... наше приложение готово. Теперь вы можете запустить приложение, и оно даст вам декодированный результат входного изображения, которое мы дали.
Чтобы изменить ввод, отправьте другой файл на SD-карту, используя приведенную ниже команду в командной строке.
c:\>adb push "c:\image2.png" /sdcard
и измените ввод в нашем QRDecoder.java, чтобы отразить тот же
Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");
входные данные могут быть любого формата, такого как QRCode, штрих-код и т. д. Типы изображений могут быть bmp, jpg или png.
Я использовал приведенный ниже веб-сайт для создания QR-кодов для целей тестирования.
Спасибо, и я хотел бы отметить тот момент, что я только новичок в разработке приложений для Android и мобильных приложений и прошу прощения за любые ошибки, которые я мог сделать...
Если вы следуете ответу Палани и хотите импортировать только ядро zxing. Вот как вы можете использовать RGBLuminanceSource без импорта zxing.androidtest.
// import com.google.zxing.client.androidtest.RGBLuminanceSource;
import com.google.zxing.RGBLuminanceSource;
// Bitmap mBitmap; // some bitmap...
int width = mBitmap.getWidth();
int height = mBitmap.getHeight();
int[] pixels = new int[width * height];
mBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
try {
Result result = zxingReader.decode(binaryBitmap);
} catch (Exception e) {
e.printStackTrace();
}
Теперь вы можете использовать официальный API штрихкодов от Google:
API штрих-кодов обнаруживает штрих-коды в режиме реального времени на устройстве и в любой ориентации. Он также может обнаруживать несколько штрих-кодов одновременно.
Он считывает следующие форматы штрих-кодов:
- Одномерные штрих-коды: EAN-13, EAN-8, UPC-A, UPC-E, Code-39, Code-93, Code-128, ITF, Codabar
- 2D штрих-коды: QR-код, матрица данных, PDF-417, AZTEC
Он автоматически анализирует QR-коды, матрицу данных, PDF-417 и значения Aztec для следующих поддерживаемых форматов:
- URL-адрес
- Контактная информация (VCARD и т.д.)
- Календарное событие
- Электронное письмо
- Телефон
- смс
- ISBN
- Вай-фай
- Геолокация (широта и долгота)
- Водительское удостоверение / удостоверение личности AAMVA
Я сам попробовал этот метод, и больше всего мне показалось, что он работает.
Хотя у меня есть несколько моментов, чтобы сделать
Он будет жаловаться на пакет com.google.zxing.client.androidtest, который необходим для класса RGBLuminanceSource, найденного в пакете и используемого в действии QRDecoder. Поэтому также импортируйте пакет zxing/androidtest.
Если вы добавляете библиотеку Zxing вне своего пакета, вам нужно будет отредактировать все ссылки на R.java, поскольку он не найдет файл R.java в своем пакете.
Например:
Вместо
mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run);
в файле BenchmarkActivity.java используйте
mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run);
Мы также можем использовать интерфейс DDMS Eclipse для передачи QRCode на SDCard устройства.
https://github.com/dm77/barcodescanner
Я предпочел эту библиотеку Сервисам Google Play, потому что, как обычно, для Сервисов Google Play требуется та же версия, установленная на устройстве.
Он встраивает Zxing в новую систему сборки и предоставляет файл aar. Очень круто.
Какое-то время я пытался внедрить ZXing (XZing), пока не обнаружил Zbar. У них более простой способ встраивания, меньше кода и простые примеры.
http://sourceforge.net/projects/zbar/