Integración de la biblioteca de ZXing directamente en mi aplicación de Android

Estoy escribiendo esto en mera desesperación 🙂 He sido asignado a hacer un escáner autónomo de código de barras (como prueba de concepto) a un teléfono Android 1.6.

Para esto he descubierto la librería ZXing.

He buscado en Google, he leído temas relacionados aquí en StackOverflow utilizado sence común y así sucesivamente. Nada parecía haber ayudado, y yo no puedo perforar un agujero en este bloqueo mentales: /

Sé que es posible, para usar el lib, y crear su propio escáner autónomo de código de barras. He leído que con el "Barcode Scanner" proporcionado por la gente Zxing, es por lejos la solución más fácil (a través de intención). Desafortunadamente esto no es una opción, y se desea una aplicación independiente.

Así que para resumir mi problema:

  1. ¿Cómo integrar el código fuente de ZXing en mi proyecto de código de Android a través de Eclipse?
  2. Cuando está integrado … cómo hacer uso de la lib, para "cargar" la función de escaneo?
  3. Una guía paso a paso es casi preferida porque acabo de empezar a trabajar en Eclipse.

He intentado hacer que mi proyecto de código dependa de la carpeta de Android de la carpeta de origen de ZXing. Cuando hago así, un handfull errores emergen, sobre todo concerniente a 'org.apache' (??)

Simplemente no puedo averiguarlo … así que algunos consejos sería más útil.

De antemano, gracias 🙂

¡ACTUALIZAR! – SOLUCIÓN + GUÍA

He conseguido averiguarlo 🙂 Y abajo, puedes leer la guía paso a paso, así que espero que pueda ayudar a otros con el mismo problema que yo;)

  1. Instalar Apache Ant – ( Vea este video de YouTube para la ayuda de configuración )
  2. Descargue la fuente de ZXing de la página principal de ZXing y extráigala
  3. Con el uso de la línea de comandos de Windows (Run-> CMD), navegue hasta el directorio raíz del zxing src descargado.
  4. En la ventana de la línea de comandos – Tipo ant -f core/build.xml pulse enter y deje que Apache funcione es mágico [¿ tiene problemas? ]
  5. Introduzca Eclipse -> nuevo Android Project, basado en la carpeta android del directorio que acaba de extraer
  6. Haga clic con el botón derecho en la carpeta del proyecto -> Propiedades -> Java Build Path -> Biblioteca -> Agregar JARs externos …
  7. Navegue hasta la carpeta recién extraída y abra el directorio principal y seleccione core.jar … pulse enter!

Ahora sólo tienes que corregir algunos errores en las traducciones y el archivo AndroidManifest.xml 🙂 Ahora puedes compilar felizmente, y ahora tendrás una aplicación autónoma de escáner de código de barras, basada en la fuente ZXing;)

Feliz codificación chicos – Espero que pueda ayudar a otros 🙂

Aquí está una guía paso a paso sobre cómo generar y mostrar código QR usando la biblioteca de ZXing sin tener que instalar la aplicación de terceros. Nota: no es necesario crear ZXing con ANT o cualquier otra herramienta de compilación. El archivo core.jar está disponible en el archivo zip liberado (lea abajo).

  1. Descargue la última versión de ZXing . – ( ZXing-*.zip )
  2. Extraiga este archivo zip y busque core.jar en core/ directory.
  3. Si utiliza Eclipse IDE, arrastre y suelte core.jar al directorio libs de su proyecto de Android. Cuando se le solicite, seleccione Copiar .
  4. Copie las dos clases que aparecen a continuación ( Contents.java y QRCodeEncoder.java ) en el paquete principal de su proyecto de Android.
  5. Cree un elemento ImageView en su actividad para mostrar el código QR generado si no lo tiene. Un ejemplo se da a continuación:
  6. Utilice el siguiente fragmento de código para generar el código QR en formato Bitmap y visualizarlo en un ImageView .

Este es un elemento ImageView que se agrega a su archivo XML de Layout de actividad:

 <ImageView android:id="@+id/qrCode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:layout_centerHorizontal="true"/> 

Fragmento de código:

 // ImageView to display the QR code in. This should be defined in // your Activity's XML layout file ImageView imageView = (ImageView) findViewById(R.id.qrCode); String qrData = "Data I want to encode in QR code"; int qrCodeDimention = 500; QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, null, Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), qrCodeDimention); try { Bitmap bitmap = qrCodeEncoder.encodeAsBitmap(); imageView.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } 

Aquí está Contents.java

 // // * Copyright (C) 2008 ZXing authors // * // * Licensed under the Apache License, Version 2.0 (the "License"); // * you may not use this file except in compliance with the License. // * You may obtain a copy of the License at // * // * http://www.apache.org/licenses/LICENSE-2.0 // * // * Unless required by applicable law or agreed to in writing, software // * distributed under the License is distributed on an "AS IS" BASIS, // * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // * See the License for the specific language governing permissions and // * limitations under the License. // import android.provider.ContactsContract; public final class Contents { private Contents() { } public static final class Type { // Plain text. Use Intent.putExtra(DATA, string). This can be used for URLs too, but string // must include "http://" or "https://". public static final String TEXT = "TEXT_TYPE"; // An email type. Use Intent.putExtra(DATA, string) where string is the email address. public static final String EMAIL = "EMAIL_TYPE"; // Use Intent.putExtra(DATA, string) where string is the phone number to call. public static final String PHONE = "PHONE_TYPE"; // An SMS type. Use Intent.putExtra(DATA, string) where string is the number to SMS. public static final String SMS = "SMS_TYPE"; public static final String CONTACT = "CONTACT_TYPE"; public static final String LOCATION = "LOCATION_TYPE"; private Type() { } } public static final String URL_KEY = "URL_KEY"; public static final String NOTE_KEY = "NOTE_KEY"; // When using Type.CONTACT, these arrays provide the keys for adding or retrieving multiple phone numbers and addresses. public static final String[] PHONE_KEYS = { ContactsContract.Intents.Insert.PHONE, ContactsContract.Intents.Insert.SECONDARY_PHONE, ContactsContract.Intents.Insert.TERTIARY_PHONE }; public static final String[] PHONE_TYPE_KEYS = { ContactsContract.Intents.Insert.PHONE_TYPE, ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE, ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE }; public static final String[] EMAIL_KEYS = { ContactsContract.Intents.Insert.EMAIL, ContactsContract.Intents.Insert.SECONDARY_EMAIL, ContactsContract.Intents.Insert.TERTIARY_EMAIL }; public static final String[] EMAIL_TYPE_KEYS = { ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE, ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE }; } 

Y QRCodeEncoder.java

 /* * Copyright (C) 2008 ZXing authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import android.provider.ContactsContract; import android.graphics.Bitmap; import android.os.Bundle; import android.telephony.PhoneNumberUtils; import java.util.Collection; import java.util.EnumMap; import java.util.HashSet; import java.util.Map; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; public final class QRCodeEncoder { private static final int WHITE = 0xFFFFFFFF; private static final int BLACK = 0xFF000000; private int dimension = Integer.MIN_VALUE; private String contents = null; private String displayContents = null; private String title = null; private BarcodeFormat format = null; private boolean encoded = false; public QRCodeEncoder(String data, Bundle bundle, String type, String format, int dimension) { this.dimension = dimension; encoded = encodeContents(data, bundle, type, format); } public String getContents() { return contents; } public String getDisplayContents() { return displayContents; } public String getTitle() { return title; } private boolean encodeContents(String data, Bundle bundle, String type, String formatString) { // Default to QR_CODE if no format given. format = null; if (formatString != null) { try { format = BarcodeFormat.valueOf(formatString); } catch (IllegalArgumentException iae) { // Ignore it then } } if (format == null || format == BarcodeFormat.QR_CODE) { this.format = BarcodeFormat.QR_CODE; encodeQRCodeContents(data, bundle, type); } else if (data != null && data.length() > 0) { contents = data; displayContents = data; title = "Text"; } return contents != null && contents.length() > 0; } private void encodeQRCodeContents(String data, Bundle bundle, String type) { if (type.equals(Contents.Type.TEXT)) { if (data != null && data.length() > 0) { contents = data; displayContents = data; title = "Text"; } } else if (type.equals(Contents.Type.EMAIL)) { data = trim(data); if (data != null) { contents = "mailto:" + data; displayContents = data; title = "E-Mail"; } } else if (type.equals(Contents.Type.PHONE)) { data = trim(data); if (data != null) { contents = "tel:" + data; displayContents = PhoneNumberUtils.formatNumber(data); title = "Phone"; } } else if (type.equals(Contents.Type.SMS)) { data = trim(data); if (data != null) { contents = "sms:" + data; displayContents = PhoneNumberUtils.formatNumber(data); title = "SMS"; } } else if (type.equals(Contents.Type.CONTACT)) { if (bundle != null) { StringBuilder newContents = new StringBuilder(100); StringBuilder newDisplayContents = new StringBuilder(100); newContents.append("MECARD:"); String name = trim(bundle.getString(ContactsContract.Intents.Insert.NAME)); if (name != null) { newContents.append("N:").append(escapeMECARD(name)).append(';'); newDisplayContents.append(name); } String address = trim(bundle.getString(ContactsContract.Intents.Insert.POSTAL)); if (address != null) { newContents.append("ADR:").append(escapeMECARD(address)).append(';'); newDisplayContents.append('\n').append(address); } Collection<String> uniquePhones = new HashSet<String>(Contents.PHONE_KEYS.length); for (int x = 0; x < Contents.PHONE_KEYS.length; x++) { String phone = trim(bundle.getString(Contents.PHONE_KEYS[x])); if (phone != null) { uniquePhones.add(phone); } } for (String phone : uniquePhones) { newContents.append("TEL:").append(escapeMECARD(phone)).append(';'); newDisplayContents.append('\n').append(PhoneNumberUtils.formatNumber(phone)); } Collection<String> uniqueEmails = new HashSet<String>(Contents.EMAIL_KEYS.length); for (int x = 0; x < Contents.EMAIL_KEYS.length; x++) { String email = trim(bundle.getString(Contents.EMAIL_KEYS[x])); if (email != null) { uniqueEmails.add(email); } } for (String email : uniqueEmails) { newContents.append("EMAIL:").append(escapeMECARD(email)).append(';'); newDisplayContents.append('\n').append(email); } String url = trim(bundle.getString(Contents.URL_KEY)); if (url != null) { // escapeMECARD(url) -> wrong escape eg http\://zxing.google.com newContents.append("URL:").append(url).append(';'); newDisplayContents.append('\n').append(url); } String note = trim(bundle.getString(Contents.NOTE_KEY)); if (note != null) { newContents.append("NOTE:").append(escapeMECARD(note)).append(';'); newDisplayContents.append('\n').append(note); } // Make sure we've encoded at least one field. if (newDisplayContents.length() > 0) { newContents.append(';'); contents = newContents.toString(); displayContents = newDisplayContents.toString(); title = "Contact"; } else { contents = null; displayContents = null; } } } else if (type.equals(Contents.Type.LOCATION)) { if (bundle != null) { // These must use Bundle.getFloat(), not getDouble(), it's part of the API. float latitude = bundle.getFloat("LAT", Float.MAX_VALUE); float longitude = bundle.getFloat("LONG", Float.MAX_VALUE); if (latitude != Float.MAX_VALUE && longitude != Float.MAX_VALUE) { contents = "geo:" + latitude + ',' + longitude; displayContents = latitude + "," + longitude; title = "Location"; } } } } public Bitmap encodeAsBitmap() throws WriterException { if (!encoded) return null; Map<EncodeHintType, Object> hints = null; String encoding = guessAppropriateEncoding(contents); if (encoding != null) { hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class); hints.put(EncodeHintType.CHARACTER_SET, encoding); } MultiFormatWriter writer = new MultiFormatWriter(); BitMatrix result = writer.encode(contents, format, dimension, dimension, hints); int width = result.getWidth(); int height = result.getHeight(); int[] pixels = new int[width * height]; // All are 0, or black, by default for (int y = 0; y < height; y++) { int offset = y * width; for (int x = 0; x < width; x++) { pixels[offset + x] = result.get(x, y) ? BLACK : WHITE; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } private static String guessAppropriateEncoding(CharSequence contents) { // Very crude at the moment for (int i = 0; i < contents.length(); i++) { if (contents.charAt(i) > 0xFF) { return "UTF-8"; } } return null; } private static String trim(String s) { if (s == null) { return null; } String result = s.trim(); return result.length() == 0 ? null : result; } private static String escapeMECARD(String input) { if (input == null || (input.indexOf(':') < 0 && input.indexOf(';') < 0)) { return input; } int length = input.length(); StringBuilder result = new StringBuilder(length); for (int i = 0; i < length; i++) { char c = input.charAt(i); if (c == ':' || c == ';') { result.append('\\'); } result.append(c); } return result.toString(); } } 

los

 compile 'com.google.zxing:core:2.3.0' 

Por desgracia no funcionó para mí.

Esto es lo que funcionó para mí:

 dependencies { compile 'com.journeyapps:zxing-android-embedded:3.0.1@aar' compile 'com.google.zxing:core:3.2.0' } 

Por favor, encuentre el enlace aquí: https://github.com/journeyapps/zxing-android-embedded

¿Ha tenido problemas con ANT? Sigue leyendo

Si ant -f core/build.xml dice algo como:

 Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre6\lib\tools.jar 

A continuación, establezca la variable de entorno JAVA_HOME en la carpeta java adecuada. Encontré tools.jar en mi (para Windows):

 C:\Program Files\Java\jdk1.6.0_21\lib 

Así que JAVA_HOME mi JAVA_HOME a:

 C:\Progra~1\Java\jdk1.6.0_25 

La razón de la sintaxis más corta que encontré en algún sitio que dice:

"Se recomienda encarecidamente que elija un directorio de instalación que no incluya espacios en el nombre de la ruta de acceso (por ejemplo, no instale en C: \ Archivos de programa) .Si Java está instalado en dicho directorio, es fundamental establecer el JAVA_HOME Variable de entorno a una ruta que no incluye espacios (por ejemplo, C: \ Progra ~ 1), si no lo hace resultará en excepciones lanzadas por algunos programas que dependen del valor de JAVA_HOME. "

Luego relanzé cmd (importante porque DOS shell sólo lee env vars al iniciar, por lo que cambiar un env var requerirá que utilice un nuevo shell para obtener el valor actualizado)

Y finalmente la ant -f core/build.xml funcionó.

Dado que algunas de las respuestas están obsoletas, me gustaría proporcionar mi propia –

Para integrar la biblioteca de ZXing en su aplicación para Android como sugiere su Wiki , debe agregar 2 archivos Java a su proyecto:

  • IntentIntegrator.java
  • IntentResult.java

A continuación, en Android Studio añada la siguiente línea al archivo build.gradle :

 dependencies { .... compile 'com.google.zxing:core:3.2.1' } 

O si sigue usando Eclipse con ADT-plugin, agregue el archivo core.jar al subdirectorio libs de su proyecto (aquí, a pantalla completa, Windows y Mac a pantalla completa ):

Captura de pantalla de Windows

Finalmente agregue este código a su MainActivity.java :

 public void scanQRCode(View v) { IntentIntegrator integrator = new IntentIntegrator(MainActivity.this); integrator.initiateScan(IntentIntegrator.QR_CODE_TYPES); } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); if (result != null) { String contents = result.getContents(); if (contents != null) { showDialog(R.string.result_succeeded, result.toString()); } else { showDialog(R.string.result_failed, getString(R.string.result_failed_why)); } } } private void showDialog(int title, CharSequence message) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(title); builder.setMessage(message); builder.setPositiveButton(R.string.ok_button, null); builder.show(); } 

La aplicación resultante solicitará instalar y iniciar la aplicación Escáner de códigos de barras de ZXing (que volverá a su aplicación automáticamente después de escanear):

Aplicación del escáner de códigos de barras

Además, si desea crear y ejecutar la aplicación ZXing Test como inspiración para su propia aplicación:

Aplicación de prueba de ZXing

Entonces necesitas 4 archivos Java de GitHub :

  • BenchmarkActivity.java
  • BenchmarkAsyncTask.java
  • BenchmarkItem.java
  • ZXingTestActivity.java

Y 3 archivos Jar del repositorio de Maven :

  • Core.jar
  • Android-core.jar
  • Android-integration.jar

(Usted puede construir los archivos de Jar usted mismo con el mvn package – si su salida de ZXing de GitHub e instalar las herramientas de ant y maven en su computadora).

Nota: si su proyecto no reconoce los archivos Jar, puede que necesite subir la versión de Java en Propiedades del proyecto:

Screenshot de las propiedades

¿Has visto las páginas wiki del sitio web zxing? Parece que podría encontrar GettingStarted , DeveloperNotes y ScanningViaIntent útil.

Poner

 compile 'com.google.zxing:core:2.3.0' 

En las dependencias de Gradle. Tan fácil como eso. Antes de usar Android Studio y el sistema de compilación de Gradle.

Si sólo necesita el core.jar de zxing, puede saltarse ese proceso y obtener los JARs pre-construidos de la página Getting Started wiki

La última versión de ZXing (2.2) no tiene core.jar en la carpeta central pero puede obtener el core.jar del repositorio zxing Maven aquí

Paso a paso para configurar zxing 3.2.1 en eclipse

  1. Descargar zxing-master.zip desde " https://github.com/zxing/zxing "
  2. Descomprimir zxing-master.zip, Usar eclipse para importar el proyecto "android" en zxing-master
  3. Descargar core-3.2.1.jar desde " http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/ "
  4. Crear carpeta "libs" en el proyecto "android" y pegar cor-3.2.1.jar en la carpeta libs
  5. Haga clic en proyecto: elija "propiedades" -> "Java Compiler" para cambiar el nivel a 1.7. A continuación, haga clic en "Android" cambiar "Project build target" a android 4.4.2+, porque el uso de 1.7 requiere la compilación con Android 4.4
  6. Si "CameraConfigurationUtils.java" no existe en "zxing-master / android / app / src / main / java / com / google / zxing / client / android / camera /". Puede copiarlo desde "zxing-master / android-core / src / main / java / com / google / zxing / client / android / camera /" y pegar en su proyecto.
  7. Limpie y construya el proyecto. Si su proyecto muestra error acerca de "switch – case", debe cambiarlos a "if – else".
  8. Terminado. Limpie y construya el proyecto.
  9. Enlace de referencia: Uso de ZXing para crear una aplicación de escaneo de códigos de barras de Android

He intentado todas las formas posibles para lograr esto y luego descubrí la versión Minified de xZing por JourneyApps. He portado eso para eclipse y compartido en GitHub.

Si utiliza eclipse utilice este proyecto: –

https://github.com/hiteshsahu/XZing-Barcode-Scanner-Minified-Eclipse

Si utiliza Studio utilice este proyecto:

https://github.com/journeyapps/zxing-android-embedded

Ventajas

  1. El escáner de código de barras incorporado en tu aplicación no es necesario para instalar aplicaciones de terceros con playstore.

  2. Usted no necesita confundirse entre el núcleo, las jarras del cliente etc del androide simplemente caen estos paquetes y diseños relevantes en su proyecto y usted es bueno ir. Sólo Jar requerido es com.google.zxing: core: 3.2.0 que puede descargar desde

    http://mvnrepository.com/artifact/com.google.zxing/core/3.2.0

  3. No hay necesidad de añadir toneladas de paquetes ver imágenes a continuación para comparación

Antes de :-

Introduzca aquí la descripción de la imagen

Después :-

Introduzca aquí la descripción de la imagen

  1. La parte más importante es que son altamente personalizables es decir. Usted puede agregar la luz de destello, utilizarla en el cambio de la orientación del fragmento y de la ayuda.

  2. Puede utilizar esta actividad de captura en la aplicación Cordova para escanear códigos de barras.

Su actividad de captura en el manifiesto de aplicación se vería así

  <activity android:name="com.journeyapps.barcodescanner.CaptureActivity" android:clearTaskOnLaunch="true" android:configChanges="orientation|keyboardHidden" android:exported="false" android:screenOrientation="fullSensor" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden" > <intent-filter> <action android:name="com.google.zxing.client.android.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

Y el complemento se verá así

 public class BarcodeScanner extends CordovaPlugin { public static final int REQUEST_CODE = 0x0ba7c0de; private static final String SCAN = "scan"; private static final String CANCELLED = "cancelled"; private static final String FORMAT = "format"; private static final String TEXT = "text"; private static final String SCAN_INTENT = "com.google.zxing.client.android.SCAN"; private static final String LOG_TAG = "BarcodeScanner"; private CallbackContext callbackContext; /** * Constructor. */ public BarcodeScanner() { } /** * Executes the request. * * This method is called from the WebView thread. To do a non-trivial amount of work, use: * cordova.getThreadPool().execute(runnable); * * To run on the UI thread, use: * cordova.getActivity().runOnUiThread(runnable); * * @param action The action to execute. * @param args The exec() arguments. * @param callbackContext The callback context used when calling back into JavaScript. * @return Whether the action was valid. * * @sa https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/CordovaPlugin.java */ @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) { this.callbackContext = callbackContext; if (action.equals(SCAN)) { scan(args); } else { return false; } return true; } /** * Starts an intent to scan and decode a barcode. */ public void scan(JSONArray args) { Intent intentScan = new Intent(SCAN_INTENT); intentScan.addCategory(Intent.CATEGORY_DEFAULT); // add config as intent extras if(args.length() > 0) { JSONObject obj; JSONArray names; String key; Object value; for(int i=0; i<args.length(); i++) { try { obj = args.getJSONObject(i); } catch(JSONException e) { Log.i("CordovaLog", e.getLocalizedMessage()); continue; } names = obj.names(); for(int j=0; j<names.length(); j++) { try { key = names.getString(j); value = obj.get(key); if(value instanceof Integer) { intentScan.putExtra(key, (Integer)value); } else if(value instanceof String) { intentScan.putExtra(key, (String)value); } } catch(JSONException e) { Log.i("CordovaLog", e.getLocalizedMessage()); continue; } } } } // avoid calling other phonegap apps intentScan.setPackage(this.cordova.getActivity().getApplicationContext().getPackageName()); this.cordova.startActivityForResult((CordovaPlugin) this, intentScan, REQUEST_CODE); } /** * Called when the barcode scanner intent completes. * * @param requestCode The request code originally supplied to startActivityForResult(), * allowing you to identify who this result came from. * @param resultCode The integer result code returned by the child activity through its setResult(). * @param intent An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). */ @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { JSONObject obj = new JSONObject(); try { obj.put(TEXT, intent.getStringExtra("SCAN_RESULT")); obj.put(FORMAT, intent.getStringExtra("SCAN_RESULT_FORMAT")); obj.put(CANCELLED, false); } catch (JSONException e) { Log.d(LOG_TAG, "JSONException "+e.getMessage()); } this.callbackContext.success(obj); } else if (resultCode == Activity.RESULT_CANCELED) { this.callbackContext.success(""); } else { this.callbackContext.error("Technical Problem"); } } } } 

¡Feliz integración !!

Los chicos zxing han hecho más fácil crear un proyecto android con 1.7. No es tan doloroso como solía ser. Este es un blog rápido para cualquier persona que quisiera crear un proyecto zxing para Android rápidamente.

  • Compruebe las fuentes zxing de zxing.org
  • Crea un proyecto de Android en tu eclipse
  • Eliminar main.xml
  • Haga clic derecho en el directorio "src" y pulse la importación. Busque los siguientes directorios en el orden mencionado. A medida que los agrega para importar uno por uno, asegúrese de que tiene el directorio src en el campo de edición del asistente de importación. Y que seleccione sólo el directorio "com" en el árbol de directorios izquierdo. No seleccione src.
  • núcleo
  • Android-integration
  • androide
  • Asegúrese de que su versión Android sdk es 9, nada menos y androidmanifest.xml llorar.
  • Strings.xml en uno de los idiomas de la cuna, sólo tiene que poner a / antes de que el carácter '

Un proyecto de android para zxing 1.7 (20 de junio checkout).

http://www.4shared.com/file/bFx8Y5Ys/zXingJune2010.html ( NO DISPONIBLE ANYMORE )

¿Por qué utilizar una biblioteca externa, cuando los servicios de Google Play (desde la versión 7.8.0 ) incluyen un decodificador de código de barras.

Enfoque mucho más fácil.

Solo incluye la dependencia en el archivo gradle de tu nivel de aplicación

 compile 'com.journeyapps:zxing-android-embedded:3.0.1@aar' compile 'com.google.zxing:core:3.2.0' 

Defina un botón en su archivo xml y escriba debajo del código en el archivo de Java en OnCreate () y dentro del oyente OnClick del botón

 new IntentIntegrator(this).initiateScan(); 

Y escribe debajo del código después de OnCreate () del archivo de Java

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if(result.getContents() == null) { Log.d("MainActivity", "Cancelled scan"); Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); } else { Log.d("MainActivity", "Scanned"); st_scanned_result = result.getContents(); Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); } } } 

Recientemente he utilizado google mobile vision en ambos ios y android. Recomiendo usar Google Barcode Scan. Es bastante sensible con cualquier orientación y el tiempo de procesamiento es bastante rápido. Se llama Google Mobile Vision.

El Barcode Scanner API detecta códigos de barras en tiempo real en cualquier orientación. También puede detectar y analizar varios códigos de barras en diferentes formatos al mismo tiempo.

https://developers.google.com/vision/

https://codelabs.developers.google.com/codelabs/bar-codes/#0

  • ZXing cómo escanear código QR y código de barras 1D?
  • Uso de ZXing para crear una aplicación de escaneo de códigos de barras Android
  • ZXing doble imagen / superposición después de escanear
  • Cómo codificar una cadena en un código QR usando zxing en Android?
  • ¿Por qué la vista previa de la cámara gira 90 grados en el emulador de Android?
  • ¿Cómo integrar ZXing Library a Android Studio para escanear códigos de barras?
  • ¿Cómo forzar el uso de zxing lib con sólo mi aplicación?
  • Zxing Android - ¿Cómo obtener escáner / cámara no en pantalla completa?
  • ¿Cómo importar ZXING a android studio?
  • ¿Cómo incluir la biblioteca Zxing en el proyecto android?
  • Crear / Generar código de barras usando Zxing en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.