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
- ¿Cómo abrir la pantalla de escaneo "zxing Barcode" en una pequeña ventana?
- DataMatrix-codificación con zxing sólo genera 14px mapa de bits
- Llamar escáner de código de barras en un clic de botón en la aplicación android
- Si hay cualquier tutorial para android zxing biblioteca con Fragmentos
- GridLayoutManager spanSizeLookup error
<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ó?
- ¿Cómo importar ZXING a android studio?
- Escanear códigos de barras múltiples con ZXing
- Escáner QR con ZXing y ZBar no lee códigos de baja calidad en las tarjetas
- Lanzamiento de un fragmento después de ZXing 2.0 QR-Code Scan
- ¿Puedo controlar la linterna sin usar android.hardware.Camera?
- Orientación de Android zxing: ResultMetaData es null, Get Rotation / Orientation
- Android: ClassNotFoundException mientras incluye ZXing
- Integre ZXing en Android Studio
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:
- Descargando el código fuente y el archivo central de ZXing.
- Importación del proyecto ZXing a cualquier entorno que desee (Eclipse / Studio)
- Definir el proyecto ZXing para actuar como una biblioteca y fijar el código para cumplir con estos requisitos.
- Agregar ZXing a la ruta de construcción de su propio proyecto
- 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
- Vaya a la página del proyecto GitHub de ZXing ( https://github.com/zxing/zxing ) y haga clic en "Descargar zip".
- 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
- Abra Eclipse.
- 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.
-
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
- 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.
- En el menú lateral seleccione Android y marque la casilla de verificación Is Library, haga clic en Ok para salir de la ventana
-
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
- 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.
- 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.
- 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.
- 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. - Descargue el último
core-xxxjar
de http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/ - Agregue el proyecto android en su propio proyecto. Para ello, primero, elija el
Project
desde elProject Explorer
(consulte la imagen)
- Ahora haga clic en su proyecto y luego haga clic derecho en él y seleccione
New
>Module
>Import Gradle Project
. Ahora, en seleccione el directorioandroid
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. - En este proyecto importado, haga una
libs
carpetas y coloque el archivocore.jar
descargado en el paso 2 de esta carpeta. A continuación, abra laProject Structure
delProject Structure
desde el menú archivo y agregue este archivocore.jar
como una dependencia.
-
Descargue CameraConfigurationalUtils.java y péguelo en el proyecto.
-
Ahora haga algunas modificaciones en el archivo gradle del proyecto importado. Cambie el
apply plugin: 'com.android.application'
paraapply plugin: 'com.android.library'
para decirle al sistema que es una biblioteca. Y eliminar la instrucciónapplicationId ...
-
En el archivo
Manifest.xml
del proyecto importado, realice las siguientes modificaciones. En la etiqueta<application...
, elimine elandroid:icon...
yandroid: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). -
En el archivo
build.gradle
su proyecto, en el bloque dedependencies
, agregue estecompile project (':android')
líneacompile project (':android')
Aquí, reemplace elandroid
con el nombre que eligió al importar el proyecto en el paso 4. Sincronice y limpie el proyecto. Verá algunos errores en las sentenciasswitch
. Haga clic en los casos de cambio y seleccione la opciónreplace 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:
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