Incruste la biblioteca Zxing sin utilizar la aplicación Barcode Scanner

¿Cuál es la forma preferida de incrustar la biblioteca zxing para proporcionar escaneo sin tener instalada la aplicación Barcode Scanner? Estoy buscando incrustarlo en Android sin tener que solicitar al usuario ninguna instalación adicional. (Similar a la forma en que funciona el iPhone src).

Es realmente más fácil integrar solo a través de Intent . Más confiable, y obtienes actualizaciones automáticamente. Si bien no lo aconsejo …

El código fuente completo está disponible desde el proyecto ZXing . Desea comstackr core.jar desde core/ y colocarlo en su lib/ folder de Android para incluir el decodificador core en su aplicación. No quieres incluir javase . Puedes mirar el código en android/ ya que es la fuente de Barcode Scanner, pero como autores te recomendamos que no solo copies y pegues.

Está licenciado por Apache, lo que significa que puede usarlo libremente, siempre y cuando esencialmente le proporcione al usuario acceso a los términos de la licencia.

Android QR / Barcode / Multiformat Decoder.

Creé una aplicación de Android usando las API de ZXing e incrustó solo el código de deencoding en mi aplicación. La entrada a este decodificador se dio a través de la tarjeta SD del emulador de Android.

Estos son los pasos:

  1. Primero, creé una versión 4 de AVD (emulador) en mi IDE de Eclipse con las funciones SDcard y Camera activadas.

  2. A continuación, he creado una tarjeta SD utilizando los siguientes comandos en el símbolo del sistema:

     c:\>mksdcard 40M mysdcard.iso 

donde 40M es del tamaño de la tarjeta SD que he creado … Esto se guardará en la unidad C :. Tenga en cuenta que la parte .iso es importante.

  1. A continuación, debemos montar la tarjeta SD en el emulador utilizando los comandos a continuación en el símbolo del sistema:

      c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4 

Aquí myavd4 es el nombre del emulador / dispositivo virtual android que creé en el paso 1. El signo ‘@’ antes del nombre avd también es importante.

Mantenga el emulador funcionando todo el tiempo … Si se cierra, tenemos que volver a hacer los 3 pasos anteriores.

  1. Podemos empujar el código QR u otras imágenes de código que tenemos a esta tarjeta SD montada en nuestro emulador usando los comandos a continuación en el símbolo del sistema:

     c:\>adb push "c:\myqrcode.png" /sdcard 
  2. A continuación, en el Eclipse IDE, comience un nuevo proyecto de Android. El código siguiente debe pegarse en el archivo QRDecoder.java de nuestro proyecto.

     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); } } 
  3. A continuación, descargué el código fuente de ZXing (ZXing-1.6.zip) desde el siguiente enlace.

     http://code.google.com/p/zxing/downloads/list 

Luego, extraiga esto y navegue a D: \ zxing-1.6 \ core \ src \ com

copie la carpeta com y péguela en nuestro paquete en Eclipse.

(Tenga en cuenta que haga clic derecho en el paquete de nuestro proyecto y péguelo … si solicita reemplazar la carpeta existente, seleccione sí)

  1. A continuación, copie y pegue el siguiente código en el archivo res / layout / main.xml

            
  2. A continuación, copie y pegue el siguiente código en el archivo res / values ​​/ strings.xml

       Hello World, QRDecoder! QRDecoder Click below to load the URL!! Load the URL!! Decoded URL  
  3. Luego, copie y pegue el siguiente código en el archivo res / values ​​/ color.xml, si no existe, cree uno.

       #7cfc00 #ffff00 #d2691e  
  4. A continuación, copie y pegue el código siguiente en el archivo de manifiesto después de la etiqueta de apertura

         
  5. Entonces, estos pasos anteriores … nuestra aplicación está lista. Ahora puede ejecutar la aplicación y le dará el resultado decodificado de la imagen de entrada que le hemos dado.

  6. Para cambiar la entrada, inserte otro archivo en la tarjeta SD usando el comando a continuación en el símbolo del sistema

     c:\>adb push "c:\image2.png" /sdcard 

y cambie la entrada en nuestro QRDecoder.java para reflejar el mismo

  Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png"); 

las entradas pueden ser de cualquier formato, como QRCode, Barcode, etc. … los tipos de imagen pueden ser bmp, jpg o png.

Utilicé el siguiente sitio web para generar los códigos QR para fines de prueba

http://barcode.tec-it.com/

Y http://qrcode.kaywa.com

Gracias y me gustaría mencionar el hecho de que solo soy un principiante en el desarrollo de aplicaciones para Android y dispositivos móviles, y lo siento por cualquier error que haya podido cometer …

Si siguen la respuesta de Palani y solo quieren importar zxing core. Aquí se explica cómo puede usar RGBLuminanceSource sin importar 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(); } 

Ahora puedes usar la API oficial de código de barras de Google :

Barcode API detecta los códigos de barras en tiempo real, en el dispositivo, en cualquier orientación. También puede detectar múltiples códigos de barras a la vez.

Lee los siguientes formatos de código de barras:

  • 1D códigos de barras: EAN-13, EAN-8, UPC-A, UPC-E, Código-39, Código-93, Código-128, ITF, Codabar
  • Códigos de barras 2D: Código QR, Matriz de datos, PDF-417, AZTEC

Analiza automáticamente los códigos QR, Data Matrix, PDF-417 y los valores de Aztec, para los siguientes formatos admitidos:

  • URL
  • Información de contacto (VCARD, etc.)
  • Evento de calendario
  • Email
  • Teléfono
  • SMS
  • ISBN
  • Wifi
  • Geo-ubicación (latitud y longitud)
  • Licencia de conducir / identificación de AAMVA

Yo mismo probé este método y, sobre todo, pareció funcionar.

Aunque tengo algunos puntos para hacer

  1. Se quejará del paquete com.google.zxing.client.androidtest que se necesita para la clase RGBLuminanceSource que se encuentra en el paquete y se utiliza en la actividad QRDecoder. Por lo tanto, importe también el paquete zxing / androidtest.

  2. Si está agregando la Biblioteca Zxing fuera de su paquete, deberá editar todas las referencias R.java ya que no encontrará el archivo R.java en su paquete.

Por ejemplo:

En lugar de

 mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run); 

en el uso del archivo BenchmarkActivity.java

 mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run); 

También podemos usar la interfaz DDMS de Eclipse para insertar el código QR en la tarjeta SD del dispositivo.

Usando DDMS

https://github.com/dm77/barcodescanner

Preferí esta lib sobre los Servicios de Google Play porque, como de costumbre, Google Play Services requiere la misma versión instalada en el dispositivo.

Incorpora Zxing con el nuevo sistema de comstackción y proporciona un aar. Realmente genial.

Traté de incrustar ZXing (XZing) por un tiempo, hasta que descubrí Zbar. Tienen una manera fácil de incorporar, menos código y ejemplos fáciles.

http://sourceforge.net/projects/zbar/