Incruste la biblioteca Zxing sin usar la aplicación Barcode Scanner [duplicar]


Esta pregunta ya tiene una respuesta aquí:

¿Cuál es la forma preferida de incrustar la biblioteca zxing para proporcionar escaneo sin tener instalada la aplicación Escáner de código de barras? 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).

Author: Joey Schluchter, 2011-01-31

7 answers

Es realmente más fácil de integrar a través de Intent. Más confiable, y usted recibe actualizaciones automáticamente. Mientras que yo no lo aconsejo...

El código fuente completo está disponible en el proyecto ZXing. Quieres compilar core.jar desde core/ y ponerlo en tu carpeta Android lib/ para incluir el decodificador central en tu aplicación. No desea incluir javase. Puedes mirar el código en android/ ya que es la fuente del escáner de código de barras, pero como autores, te sugerimos que no solo cópialo y pégalo.

Es Apache licensed lo que significa que puede usarlo libremente, siempre y cuando esencialmente le dé al usuario acceso a los términos de la licencia.

 59
Author: Sean Owen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-01 18:23:37

Android QR/Código de barras / Decodificador Multiformato.

He creado una aplicación Android usando las API de ZXing e incrustado 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é un AVD (emulador) versión 4 en mi IDE Eclipse con las características de la tarjeta SD y la cámara activadas.

  2. A continuación, he creado una tarjeta SD 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:. Nota, el .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 emulador/dispositivo virtual android que creé en el paso 1. El signo ' @ ' antes del nombre avd es importante demasiado.

Mantenga el emulador funcionando todo el tiempo..Si se cierra, tenemos que rehacer 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 utilizando los comandos a continuación en el símbolo del sistema:

    c:\>adb push "c:\myqrcode.png" /sdcard
    
  2. A continuación, en el IDE de Eclipse, inicie un nuevo proyecto de Android. El siguiente código debe pegarse en el QRDecoder.archivo 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. Siguiente I descargado 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 hasta 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 pide reemplazar la carpeta existente, seleccione sí)

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

    <?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 las cadenas res/values/.archivo 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 res/values/color.archivo 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. Por lo tanto, estos pasos anteriores hecho...nuestra aplicación está lista. Ahora, u puede ejecutar la aplicación y le dará el resultado decodificado de la imagen de entrada que hemos dado.

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

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

Y cambiar la entrada en nuestro QRDecoder.java para reflejar lo mismo

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

Las entradas pueden ser de cualquier formato como QRCode, Código de barras, etc....los tipos de imagen pueden ser bmp, jpg o png.

He utilizado el siguiente sitio web para generar los códigos QR para la prueba finalidad

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

Y http://qrcode.kaywa.com

Gracias y me gustaría mencionar el punto de que soy solo un principiante en Android y desarrollo de aplicaciones móviles y lo siento por los errores que podría haber hecho...

 29
Author: Palani Babu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-17 16:14:09

Si están siguiendo la respuesta de Palani y solo quieren importar zxing core. Así es como 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();
}
 4
Author: Rui Marques,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-01 22:48:58

Ahora puedes usar la 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, Data Matrix, PDF-417, AZTECA

Analiza automáticamente QR Códigos, Data Matrix, PDF-417 y valores aztecas, para los siguientes formatos soportados:

  • URL
  • Información de contacto (VCARD, etc.)
  • Evento de calendario
  • Correo electrónico
  • Teléfono
  • SMS
  • ISBN
  • WiFi
  • Geolocalización (latitud y longitud)
  • Licencia de conducir/ID de AAMVA
 4
Author: FireZenk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-11 05:08:03

Yo mismo probé este método y sobre todo parecía funcionar.

Aunque tengo algunos puntos que hacer

  1. Se quejará del paquete com.Google.zxing.cliente.androidtest que es necesario para la clase RGBLuminanceSource que se encuentra en el paquete y se utiliza en el QRDecoder Activity.So también importa el paquete zxing / androidtest.

  2. Si está agregando la biblioteca Zxing fuera de su paquete, entonces tendrá que editar todos los R.java referencias como él no encontrará el R.java archivo en su paquete.

Por Ejemplo:

En lugar de

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

En BenchmarkActivity.uso de archivos java

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

También podemos usar la interfaz DDMS de Eclipse para empujar el QRCode a la tarjeta SD del dispositivo.

Usando DDMS

 2
Author: Sankalp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-21 12:26:06

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.

Integra Zxing con el nuevo sistema de compilación y proporciona un aar. Genial.

 0
Author: tbruyelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-29 15:37:32

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

Http://sourceforge.net/projects/zbar /

 -1
Author: aslakjo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-29 22:04:40