studio pdf417 libreria code android zxing

android - pdf417 - zxing ios



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

Quiero integrar el escáner zxing en mi aplicación sin necesidad de una aplicación externa (el escáner zxing de Play Store). 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 Android Studio dijo que no se puede resolver el símbolo: .android.CaptureActivity y si ejecuto esto, ocurrió un error

java.lang.ClassNotFoundException: no se encontró la clase "com.google.zxing.client.android.CaptureActivity"

¿Que pasó?


Aquí hay una forma que funciona en eclipse:

Integración de ZXing en la aplicación de eclipse para Android

¡Feliz integración!


Aunque ya me han respondido, me parece una solución profunda para aquellos que desean usar ZXing como una biblioteca sin utilizar ningún método de instalación automática como ANT.

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

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

El proceso general es este:

  1. Descargando el código fuente de ZXing y el archivo core.
  2. Importación del proyecto ZXing a cualquier entorno que desee (Eclipse / Studio)
  3. Definiendo el proyecto ZXing para que actúe como una biblioteca y arreglando el código para cumplir con estos requisitos.
  4. Agregando ZXing a la ruta de compilación de su propio proyecto
  5. Agregando métodos ZXing según lo requiera su aplicación.

Aquí hay un procedimiento completamente detallado para aquellos que usan Eclipse (que también se puede implementar muy fácilmente para Studio):

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

  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 en algún lugar donde se encuentren la mayoría de las otras fuentes de la biblioteca)

Importando el proyecto ZXing a Eclipse

  1. Eclipse abierto.
  2. Haga clic en Archivo> Importar,> Android> "Código de Android existente en el área de trabajo", desde la ventana de selección, navegue hasta la carpeta donde extrajo el archivo zip de ZXing y seleccione la carpeta "Android". Eclipse debería detectar ahora que la carpeta contiene un proyecto llamado "captureActivity", que importa ese proyecto.
  3. Ahora debería ver la actividad de captura en su área de trabajo. Dependiendo de la versión de ZXing que tenga, es posible que deba asignar el archivo core.jar al proyecto ZXing, para verificar si este es el caso de su versión, abra la carpeta libs del proyecto captureActivity y verifique si existe el archivo core.jar, si no de lo que tiene que agregarlo usted mismo, de lo contrario, pase al siguiente capítulo.

    5.1. Para agregar el archivo core.jar, haga clic derecho en el proyecto captureActivity en el área de trabajo de Eclipse y seleccione Crear ruta> Configurar ruta de compilación

    5.2. Desde el menú lateral, seleccione Java Build Path y haga clic en la pestaña Bibliotecas.

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

    5.4. Ingrese a 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ía ver core.jar en su lista de rutas de compilación, haga clic en la pestaña "Ordenar y exportar" y verifique core.jar

Definiendo ZXing como una biblioteca y arreglando el código

  1. Si aún no está en la ventana de ruta de compilación, haga clic con el botón derecho en el proyecto captureActivity y seleccione Ruta de compilación> Configurar ruta de compilación.
  2. Desde el menú lateral, seleccione Android y marque la biblioteca Es, haga clic en Aceptar para salir de la ventana
  3. Ahora, dependiendo de la versión de ZXing que tengas, puedes ver que Eclipse marca algunos de los archivos java que contienen errores, si este es el caso, tendrás que arreglar el código para que coincida con la versión de Android de Java, de lo contrario, simplemente pasa al siguiente capítulo

    8.1. Abra cada archivo Java roto en el editor y reemplace las declaraciones de Switch rotas con una cadena de declaraciones If Else, esta es una parte molesta que conozco.

Agrega ZXing como una biblioteca de tu propio proyecto.

  1. Si todo está bien ahora, captureActivity debe aparecer como cualquier carpeta de proyecto normal en su área de trabajo, ¡sin errores o rojo! firmar. Para definir ZXing como una biblioteca en su propio proyecto, haga clic con el botón derecho en su proyecto en el área de trabajo y seleccione Crear ruta> Configurar ruta de compilación.
  2. Desde el menú lateral selecciona Android. Haga clic en el botón Agregar en la parte inferior derecha de la ventana y, desde la ventana, seleccione captureActivity.
  3. Eso es todo, su proyecto ahora puede usar ZXing como una biblioteca independiente sin la necesidad de una instalación de terceros.

Agregando los métodos de ZXing requeridos por su aplicación.

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

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);

Recuperando los resultados del escaneo 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 debe definirse en el manifiesto del proyecto, también tenga en cuenta que debe dar permiso al proyecto para usar la cámara de esta manera:

<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 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 encontré hasta ahora están basadas en Eclipse y están bastante anticuadas en este momento, estoy agregando 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 Solo agregue el módulo zxing_standalone en su proyecto y estará listo. Para más detalles o para compilarlo para las versiones más nuevas, continúe leyendo.

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

  1. Descargue el código fuente de la biblioteca ZXing desde https://github.com/zxing/zxing/ . Solo necesitaremos el directorio de android . Por lo tanto, si ya tiene esta carpeta, no necesita descargar la rama completa, que tiene un tamaño aproximado de 126 MB.
  2. Descargue el último core-xxxjar desde http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/
  3. Agrega el proyecto de Android en tu propio proyecto. Para hacer esto, primero, elija el Project desde el Project Explorer (refiérase a la imagen)

  1. Ahora haga clic en su proyecto y luego haga clic derecho y seleccione New > Module > Import Gradle Project . Ahora, seleccione el directorio de android desde el código fuente descargado (en el paso 1). (Ver foto abajo para el novato absoluto). Opcionalmente, cambie el nombre y deje la configuración predeterminada para la importación.
  2. En este proyecto importado, core.jar una carpeta libs y coloque el archivo core.jar descargado en el paso 2 en esta carpeta. Luego, abra la Project Structure del Project Structure desde el menú del archivo y agregue este archivo core.jar como una dependencia.

  1. Descargue CameraConfigurationalUtils.java y péguelo en el proyecto.

  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 elimine la sentencia applicationId ...

  3. En el archivo Manifest.xml del proyecto importado, realice las siguientes modificaciones. En la etiqueta <application... , quite el android:icon... y android:logo... y elimine esta <category android:name="android.intent.category.LAUNCHER"/> del filtro de intento ya que es una biblioteca ahora y no debe estar en el iniciador (si no lo elimina, terminará teniendo dos actividades de iniciador).

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

Eso es. Ahora puedes usar la biblioteca ZXing en tu propia aplicación. :)

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

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

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

Luego, 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"); } }

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

Lea esta respuesta por uno de los autores del código con respecto a la copia del código en su propia aplicación: https://.com/a/9942761

Referencias: share https://.com/a/29960361 Y algunas otras respuestas de blogs / SO.


Elaborando la respuesta de stackex .... Crea una actividad con cualquier nombre.

public class CaptureActivityAnyOrientation extends CaptureActivity { }

En manifiesto, defina la orientación deseada o deje como se muestra a continuación para trabajar tanto en paisaje como en portait.

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

Finalmente utiliza 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


Llego tarde, pero deseo responder sobre esto para que alguien más reciba ayuda más adelante. Esto no quiere decir que los métodos y la solución anteriores sean incorrectos, es solo una información adicional, por lo tanto, para el desarrollador, él / ella elegirá la mejor manera. Es bueno tener mil maneras de ir que tener una.

Entonces, comencemos en nuestro gradle y agreguemos

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: al hacer clic en 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 obtener más información, puede consultar el enlace https://github.com/pethoalpar/ZxingExample