Каков предпочтительный способ встраивания библиотеки zxing для обеспечения сканирования без установки приложения сканера штрих-кода? Я хочу встроить его в android, не запрашивая у пользователя никаких дополнительных установок. (Аналогично тому, как работает iPhone src).
Внедрение библиотеки Zxing без использования приложения Сканер штрих-кодов
Ответ 1
Намного проще просто интегрировать Intent. Более надежный, и вы получаете обновления автоматически. Хотя я не советую...
Полный исходный код доступен из проекта ZXing. Вы хотите построить core.jar
из core/
и поместить его в свою папку Android lib/
, чтобы включить основной декодер в ваше приложение. Вы не хотите включать javase
. Вы можете посмотреть код в android/
, поскольку он является источником для Barcode Scanner, но, как авторы, мы предлагаем вам не просто скопировать и вставить его.
Это лицензия Apache, что означает, что вы можете использовать ее свободно, если вы по существу предоставляете пользователю доступ к условиям лицензии.
Ответ 2
Android QR/Barcode/Multiformat Decoder.
Я сделал приложение для 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 тоже важен.
Храните эмулятор в рабочем состоянии все время. Если он закрыт, мы должны выполнить повторное выполнение указанных выше трех шагов.
-
Мы можем нажать 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 и мобильных приложений и сожалею о любых ошибках, которые я мог бы сделать...
Ответ 3
Если вы следуете за ответом Palani и хотите импортировать ядро 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();
}
Ответ 4
Теперь вы можете использовать официальный штрих-код API от Google:
API штрих-кода обнаруживает штрих-коды в режиме реального времени, на устройстве, в любой ориентации. Он также может обнаруживать сразу несколько штрих-кодов.
Он читает следующие форматы штрих-кода:
- 1D штрих-коды: 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 и т.д.)
- Событие календаря
- Телефон
- SMS
- ISBN
- WiFi
- Геопозиционирование (широта и долгота)
- Лицензия/идентификатор драйвера AAMVA
Ответ 5
Я сам пробовал этот метод больше всего, казалось, работал.
Хотя у меня есть несколько моментов, чтобы сделать
-
Он будет жаловаться на пакет 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 устройства.
Ответ 6
https://github.com/dm77/barcodescanner
Я предпочитаю эту библиотеку через Google Play Services, потому что, как обычно, Google Для Служб Службы требуется такая же версия, установленная на устройстве.
Он внедряет Zxing с новой системой сборки и обеспечивает aar. Действительно здорово.
Ответ 7
Я пытался вставлять ZXing (XZing) некоторое время, пока не обнаружил Zbar. Они имеют более простой способ встраивания, меньший код и простые примеры.