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).
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.
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:
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.
-
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.
-
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.
-
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
-
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); } }
-
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í)
-
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>
-
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>
-
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>
-
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" />
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.
-
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
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...
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();
}
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
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
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.
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.
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.
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.
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