Incrustar la biblioteca ZXing sin usar la aplicación de escáner de código de barras [duplicado

StackOverflow https://stackoverflow.com/questions/4854442

  •  27-10-2019
  •  | 
  •  

Pregunta

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es la forma preferida de incrustar la biblioteca ZXing para proporcionar escaneo sin instalar la aplicación de escáner de código de barras? Estoy buscando incrustarlo en Android sin tener que solicitar al usuario las instalaciones adicionales. (Similar a la forma en que funciona el iPhone SRC).

¿Fue útil?

Solución

Es realmente más fácil simplemente integrarse a través de Intención. Más confiable y obtienes actualizaciones automáticamente. Mientras no lo aconsejo ...

El código fuente completo está disponible en el Zx proyecto. Quieres construir core.jar de core/ y ponlo en tu Android lib/ Carpeta para incluir el decodificador central en su aplicación. No quieres incluir javase. Puedes mirar el código en android/ Como es la fuente del escáner de código de barras, pero como los autores le sugeriríamos que no solo lo copie y lo pegue.

Está Apache con licencia Lo que significa que puede usarlo libremente, siempre que esencialmente le dé acceso al usuario a los términos de la licencia.

Otros consejos

Android QR/Barcode/Multiformat Decoder.

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

Aquí están los pasos:

  1. Primero, creé una versión 4 AVD (emulador) en mi Eclipse IDE con la tarjeta SD y las características de la cámara activadas.

  2. A continuación, he creado una SDCARD usando los comandos a continuación en el símbolo del sistema:

    c:\>mksdcard 40M mysdcard.iso
    

donde 40m es el 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, tenemos que 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 dispositivo Virtual Emulator/Android que creé en el Paso 1. El signo '@' antes del nombre AVD también es importante.

Mantenga el emulador en funcionamiento todo el tiempo ... si se cerra, tenemos que rehacer los 3 pasos anteriores.

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

    c:\>adb push "c:\myqrcode.png" /sdcard
    
  2. Luego, en el Eclipse IDE, comience un nuevo proyecto de Android. El siguiente código 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) del 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.

(Nota, haga clic derecho en el paquete de nuestro proyecto y pegue ... si solicita reemplazar la carpeta existente, seleccione Sí)

  1. A continuación, copie y pegue el siguiente código en el archivo res/diseño/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>
    
  2. A continuación, copie y pegue el siguiente código en el archivo res/valores/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>
    
  3. A continuación, copie y pegue el siguiente código en el archivo res/valores/color.xml, si no existe, cree uno.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="mbackground1">#7cfc00</color>
    <color name="mbackground2">#ffff00</color>
    <color name="mytextcolor">#d2691e</color>
    </resources>
    
  4. A continuación, copie y pegue el siguiente código en el archivo de manifiesto después de la etiqueta de apertura

    <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" />      
    
  5. Entonces, estos pasos anteriores realizados ... nuestra aplicación está lista. Ahora, puede ejecutar la aplicación y le dará el resultado decodificado de la imagen de entrada que hemos dado.

  6. Para cambiar la entrada, presione otro archivo a 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 lo mismo

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

Las entradas pueden ser cualquier formato como QRCode, Barcode, etc. Los tipos de imagen pueden ser BMP, JPG o PNG.

Utilicé el sitio web a continuación 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 punto de que solo soy un principiante en el desarrollo de aplicaciones de Android y móviles y lamento los errores que podría haber cometido ...

Si están siguiendo la respuesta de Palani y solo quieren importar Zxing Core. Así es como puedes usar Rgbluminesource 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 el API oficial de código de barras de Google:

La API de código de barras detecta 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:

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

Analiza automáticamente los códigos QR, la matriz de datos, los valores PDF-417 y AZTEC, para los siguientes formatos admitidos:

  • Url
  • Información de contacto (VCard, etc.)
  • Evento calendario
  • Correo electrónico
  • Teléfono
  • SMS
  • ISBN
  • Wifi
  • Geo-ubicación (latitud y longitud)
  • AAMVA Licencia/ID de conducir

Yo mismo probé este método, al máximo todo parecía funcionar.

Aunque tengo algunos puntos para hacer

  1. Se quejará del paquete com.google.zxing.client.androidtest que es necesario para la clase RGBLuminesource que se encuentra en el paquete y se usa en la actividad QRDECoder. También importe el paquete ZXing/AndroidTest también.

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

Por ejemplo:

En vez de

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

En el archivo de archivo de BenchmarkActivity.java

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

También podemos usar la interfaz DDMS de Eclipse para empujar el Ccode QR a la tarjeta SD de 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 el zx en el nuevo sistema de compilación y proporciona un AAR. Realmente genial.

Traté de insertar Zx (Xzing) por un tiempo, hasta que descubrí Zbar. Tienen una forma más fácil de integrar, menos código y ejemplos fáciles.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top