Cómo integrar Zxing Barcode Scanner sin instalar la aplicación real zxing (no se puede resolver el símbolo: .android.CaptureActivity)?

Quiero integrar zxing escáner en mi aplicación sin necesidad de aplicación externa (zxing escáner de la tienda de juego). Este es mi codigo

Button scan = (Button) findViewById(R.id.scan_button); scan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.setPackage("com.mypackage.app"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, SCANNER_REQUEST_CODE); } }); @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == SCANNER_REQUEST_CODE) { // Handle scan intent if (resultCode == Activity.RESULT_OK) { // Handle successful scan String contents = intent.getStringExtra("SCAN_RESULT"); String formatName = intent.getStringExtra("SCAN_RESULT_FORMAT"); byte[] rawBytes = intent.getByteArrayExtra("SCAN_RESULT_BYTES"); int intentOrientation = intent.getIntExtra("SCAN_RESULT_ORIENTATION", Integer.MIN_VALUE); Integer orientation = (intentOrientation == Integer.MIN_VALUE) ? null : intentOrientation; String errorCorrectionLevel = intent.getStringExtra("SCAN_RESULT_ERROR_CORRECTION_LEVEL"); } else if (resultCode == Activity.RESULT_CANCELED) { // Handle cancel } } else { // Handle other intents } } 

AndroidManifest.xml

 <activity android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" 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> 

Mi estudio de Android dijo que no se puede resolver el símbolo: .android.CaptureActivity y si ejecuto esto, el error ocurrió

Java.lang.ClassNotFoundException: No encontró la clase "com.google.zxing.client.android.CaptureActivity"

¿Que pasó?

Aunque ya se ha respondido me siento como una solución en profundidad para aquellos que quieren utilizar ZXing como una biblioteca sin utilizar ningún método de instalación automática como ANT.

ZXing siendo un proyecto de código abierto permite (como se describe en el sitio web de ZXing) que utilice sus características como una biblioteca de proyectos en lugar de forzar la instalación de aplicaciones de terceros en el dispositivo de usuarios, en mi opinión esta es la opción preferida para la mayoría de los proyectos.

Es importante destacar que esta forma es aceptable por los creadores y no violará ninguno de sus términos de uso, ya que no vamos a copiar su código sino simplemente usarlo como una biblioteca de nuestro proyecto.

El proceso general es éste:

  1. Descargando el código fuente y el archivo central de ZXing.
  2. Importación del proyecto ZXing a cualquier entorno que desee (Eclipse / Studio)
  3. Definir el proyecto ZXing para actuar como una biblioteca y fijar el código para cumplir con estos requisitos.
  4. Agregar ZXing a la ruta de construcción de su propio proyecto
  5. Adición de métodos ZXing según lo requiera su aplicación.

Aquí está un procedimiento completamente detallado para aquellos que usan Eclipse (que también puede implementarse fácilmente para Studio):

Descargando el código fuente y el archivo principal de ZXing

  1. Vaya a la página del proyecto GitHub de ZXing ( https://github.com/zxing/zxing ) y haga clic en "Descargar zip".
  2. Extraiga los archivos (recomiendo usar un lugar donde se encuentran la mayoría de las otras fuentes de la biblioteca)

Importación del proyecto ZXing a Eclipse

  1. Abra Eclipse.
  2. Haga clic en Archivo> Importar,> Android> "Código Android existente en área de trabajo", desde la ventana de selección, vaya a la carpeta donde extrajo el archivo zip de ZX y seleccione la carpeta "Android". Eclipse ahora debe detectar la carpeta contienen un proyecto llamado "captureActivity", importar ese proyecto.
  3. Ahora debería ver actividad de captura en su área de trabajo. Dependiendo de la versión de ZXing, es posible que deba asignar el archivo core.jar al proyecto ZXing, para comprobar si este es el caso de su versión, abra la carpeta libs del proyecto captureActivity y compruebe si existe el archivo core.jar De lo que tiene que añadir usted mismo, de lo contrario saltar al siguiente capítulo.

    5.1. Para agregar el archivo core.jar, haga clic con el botón derecho en el proyecto captureActivity en el espacio de trabajo de Eclipse y seleccione Build path> configure build path

    5.2. En el menú lateral seleccione Java Build Path y haga clic en la pestaña Libraries.

    5.3.Haga clic en "Agregar JARs externos" y vaya a donde originalmente exportó ZXing zip.

    5.4. Introduzca la carpeta central y seleccione core.jar (el nombre puede diferir según la versión de ZXing) y haga clic en Abrir

    5.5. Ahora deberías ver core.jar en tu lista de rutas de construcción, hacer clic en la pestaña "Order and Export" y comprobar core.jar

Definición de ZXing como biblioteca y fijación del código

  1. Si aún no está en la ventana de la ruta de construcción, haga clic con el botón derecho del ratón en el proyecto captureActivity y seleccione Build path> configure build path.
  2. En el menú lateral seleccione Android y marque la casilla de verificación Is Library, haga clic en Ok para salir de la ventana
  3. Ahora, dependiendo de la versión de ZXing que tenga, puede ver Eclipse marcar algunos de los archivos java que contienen errores, si este es el caso, tendrá que arreglar el código para que coincida con la versión java de Android, de lo contrario simplemente pasar al siguiente capítulo

    8.1. Abrir cada archivo roto de java en el editor y reemplazar las declaraciones rotas Switch con una cadena de declaraciones Si Else, esta es una parte molesta que conozco.

Agregue ZXing como una biblioteca de su propio proyecto

  1. Si todo va bien ahora captureActivity debería aparecer como cualquier carpeta de proyecto normal en su espacio de trabajo, sin errores o rojo! firmar. Para definir ZXing como una biblioteca en su propio proyecto, haga clic con el botón derecho del ratón en su proyecto en el área de trabajo y seleccione Generar ruta> Configurar ruta de construcción.
  2. En el menú lateral, selecciona Android. Haga clic en el botón Añadir en la parte inferior derecha de la ventana y en la ventana seleccione captureActivity.
  3. Eso es todo, su proyecto ahora puede utilizar ZXing como una biblioteca independiente sin la necesidad de ninguna instalación de terceros.

Adición de los métodos de ZXing requeridos por la aplicación

Esta parte no es realmente una guía, sino simplemente lo que he encontrado útil para mis propias necesidades hasta el momento, los dos métodos que utilizo en su mayoría son los siguientes:

Ejecutar el escáner y capturar un código QR:

 Intent intent = new Intent(getApplicationContext(),CaptureActivity.class); intent.setAction("com.google.zxing.client.android.SCAN"); intent.putExtra("SAVE_HISTORY", false); startActivityForResult(intent, 0); 

Recuperación de los resultados del análisis en onActivityResult ():

 if (requestCode == 0) { if (resultCode == RESULT_OK) { String contents = data.getStringExtra("SCAN_RESULT"); Log.d(TAG, "contents: " + contents); } else if (resultCode == RESULT_CANCELED) { // Handle cancel Log.d(TAG, "RESULT_CANCELED"); } } 

Tenga en cuenta que al igual que cualquier otra actividad en la actividad de captura de Android también deben definirse en el manifiesto del proyecto, también tenga en cuenta que usted tiene que dar el permiso de proyecto para utilizar la cámara así:

 <uses-permission android:name="android.permission.CAMERA" /> <activity android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="landscape" > </activity> 

Espero que esto ayude a otros a ahorrar unas buenas horas de investigación.

Como un bono adicional, recomiendo leer: https://biocram.wordpress.com/2013/06/11/integrate-zxing-as-a-library-inside-an-android-project/

Como todas las respuestas que he encontrado hasta ahora se basan en Eclipse y son bastante anticuadas a partir de ahora, estoy añadiendo mi respuesta para agregar ZXing como una biblioteca independiente en Android Studio (2.1.2).

He puesto el proyecto compilado en Github https://github.com/tarun0/ZXing-Standalone-library Simplemente agregue el módulo zxing_standalone en su proyecto y estará listo para hacerlo. Para obtener más detalles o para compilarlo para las versiones más recientes, continúe leyendo.

Puede parecer largo procedimiento, pero una vez que lo atraviesa, lo encontrará bastante fácil y corto.

  1. Descargue el código fuente de la biblioteca ZXing desde https://github.com/zxing/zxing/ Sólo necesitamos el directorio android de esto. Así que si ya tienes esta carpeta, no necesitas descargar la rama entera, que tiene unos 126MB de tamaño.
  2. Descargue el último core-xxxjar de http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/
  3. Agregue el proyecto android en su propio proyecto. Para ello, primero, elija el Project desde el Project Explorer (consulte la imagen)

Introduzca aquí la descripción de la imagen

  1. Ahora haga clic en su proyecto y luego haga clic derecho en él y seleccione New > Module > Import Gradle Project . Ahora, en seleccione el directorio android desde el código fuente descargado (en el paso 1). (Imagen de referencia abajo para el principiante absoluto). Opcionalmente, cambie el nombre y permita la configuración predeterminada para la importación. Introduzca aquí la descripción de la imagen
  2. En este proyecto importado, haga una libs carpetas y coloque el archivo core.jar descargado en el paso 2 de esta carpeta. A continuación, abra la Project Structure del Project Structure desde el menú archivo y agregue este archivo core.jar como una dependencia.

Introduzca aquí la descripción de la imagen En el paso 2 Seleccione <código> Añadir dependencia de archivos </ code>

  1. Descargue CameraConfigurationalUtils.java y péguelo en el proyecto. Introduzca aquí la descripción de la imagen

  2. Ahora haga algunas modificaciones en el archivo gradle del proyecto importado. Cambie el apply plugin: 'com.android.application' para apply plugin: 'com.android.library' para decirle al sistema que es una biblioteca. Y eliminar la instrucción applicationId ...

  3. En el archivo Manifest.xml del proyecto importado, realice las siguientes modificaciones. En la etiqueta <application... , elimine el android:icon... y android:logo... y elimine este <category android:name="android.intent.category.LAUNCHER"/> del filtro de intenciones como este Es una biblioteca ahora y no se supone que esté en el lanzador (si no quitas esto, terminarás teniendo dos actividades de lanzador).

  4. En el archivo build.gradle su proyecto, en el bloque de dependencies , agregue este compile project (':android') línea compile project (':android') Aquí, reemplace el android con el nombre que eligió al importar el proyecto en el paso 4. Sincronice y limpie el proyecto. Verá algunos errores en las sentencias switch . Haga clic en los casos de cambio y seleccione la opción replace with if opción proporcionada por Android Studio.

Eso es. Ahora puede utilizar la biblioteca de ZXing en su propia aplicación. 🙂

Para usar la biblioteca agregada, use los Intents como se indica en la primera respuesta anterior (copiando los mismos códigos solamente):

Mientras escanea (como al hacer clic en un botón), envíe Propósito:

 Intent intent = new Intent(getApplicationContext(),CaptureActivity.class); intent.setAction("com.google.zxing.client.android.SCAN"); intent.putExtra("SAVE_HISTORY", false); startActivityForResult(intent, 0); 

Entonces, en OnActivityResult :

 if (requestCode == 0) { if (resultCode == RESULT_OK) { String contents = data.getStringExtra("SCAN_RESULT"); Log.d(TAG, "contents: " + contents); } else if (resultCode == RESULT_CANCELED) { // Handle cancel Log.d(TAG, "RESULT_CANCELED"); } } 

Traté de ser lo más descriptivo posible. Espero que la gente lo encuentre útil.

Por favor, lea esta respuesta de uno de los autores del código sobre la copia del código en su propia aplicación: https://stackoverflow.com/a/9942761

Referencias: https://stackoverflow.com/a/29818279 https://stackoverflow.com/a/29960361 Y algunos otros blogs / SO respuestas.

No sé por qué sucedió, pero finalmente uso otra biblioteca. Uso Zxing-android-minimal y tutorial desde aquí y aquí . Ahora funciona.

Si tienes problemas para encontrar el tarro como yo, aquí tienes la URL:

http://repo1.maven.org/maven2/com/google/zxing/

Estoy muy tarde, pero deseo responder a esto para que alguien más pueda ser ayudado más tarde. Esto no quiere decir que los métodos anteriores y la solución están mal, es sólo una información adicional para que, para el desarrollador él / ella va a elegir la mejor manera. Es bueno tener mil pasos por recorrer que tener uno.

Por lo tanto, vamos a empezar en nuestro gradle y agregar

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

Llamar al módulo como (por ejemplo: pulsando el botón):

 IntentIntegrator integrator = new IntentIntegrator(Home.this); integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES); integrator.setPrompt("Scan Code"); integrator.setCameraId(0); integrator.setBeepEnabled(true); integrator.setBarcodeImageEnabled(false); integrator.initiateScan(); 

Obtenga los resultados como:

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

}

Para más información puede consultar el enlace https://github.com/pethoalpar/ZxingExample

Esta es una manera que funciona en eclipse:

Integración de ZXing en la aplicación android de eclipse

Feliz integración!

Elaborar la respuesta de stackex … Crear una actividad con cualquier nombre.

 public class CaptureActivityAnyOrientation extends CaptureActivity { } 

En manifesto definir la orientación deseada o dejar como abajo para trabajar tanto en el paisaje y portait.

 <activity android:name=".CaptureActivityAnyOrientation" android:screenOrientation="fullSensor" android:stateNotNeeded="true" android:theme="@style/zxing_CaptureTheme" android:windowSoftInputMode="stateAlwaysHidden"/> 

Finalmente utilice la actividad creada como setCaptureActivity.

 IntentIntegrator.forSupportFragment(fragment) .setCaptureActivity(CaptureActivityAnyOrientation.class) .setOrientationLocked(false) .setBeepEnabled(true) .addExtra("PROMPT_MESSAGE", "Scan QR Code") .initiateScan(IntentIntegrator.QR_CODE_TYPES); 

Espero que esto ayude.

En mi código llegué a esta versión:

 Camera.PreviewCallback myCallBack = new Camera.PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { Camera.Parameters parameters = camera.getParameters(); int width = parameters.getPreviewSize().width; int height = parameters.getPreviewSize().height; int format = parameters.getPreviewFormat(); LuminanceSource source = null; if(format == ImageFormat.NV21) //YCbCr_420_SP) { source = new PlanarYUVLuminanceSource(imgData, bitmapWidth, bitmapHeight, 0,0, bitmapWidth,bitmapHeight, false); } else { throw new UnsupportedOperationException("Unsupported image format "); } BinaryBitmap bBitmap = new BinaryBitmap(new HybridBinarizer(source)); try { Result result = reader.decode(bBitmap); txt.setText(result.getText()) } catch (NotFoundException e) { //txt.setText(""); } } }; 

con

 import android.hardware.Camera; import com.google.zxing.BinaryBitmap; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.NotFoundException; import com.google.zxing.PlanarYUVLuminanceSource; import com.google.zxing.Result; import com.google.zxing.common.HybridBinarizer; Camera mCamera; MultiFormatReader reader; TextView txt; 

Espero que esto ayude a alguien.

Antonino

  • ZXing Android Generar código de barras 1D
  • Crear un código QR y mostrarlo en ImageView
  • Cómo detener la exploración continua mediante zxing-android-embedded en Android
  • Cómo cambiar correctamente el nombre del paquete en AndroidManifest.xml (por ejemplo, en el proyecto zxing / barcodescanner)
  • Alternativa a la biblioteca de lectores QR de zxing para Java / Android?
  • Cómo leer varios códigos qr de una imagen usando la biblioteca zxing
  • Cómo obtener un error de cámara en la aplicación de código de barras de Zxing
  • Zxing usando diseño personalizado
  • ¿Cómo puedo codificar caracteres usando UTF-8 en un código QR usando el proyecto Zxing?
  • Uso de zxing en Google Glass
  • Android - Barcode Scanning, Opciones? Zxing?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.