La base del tutorial la he sacado de aquí, aunque me surgieron algunos problemas más que no están comentados en ese, así que me he animado a hacer este.
Lo que se explica aquí esta probado para la revisión 2099 e inferiores del proyecto zXing, para versiones posteriores desconozco si funciona.
Obtener zXing
Puedes bájarte directamente (password zxing) el proyecto configurado (revisión del repositorio 2099 y el SDK con android 4.0).
Este proyecto tiene las mejoras de cambiar tamaño rectángulo cámara (simular cuadrado para QR), eliminar botón de menús y eliminar texto de estado para modo portrait, no elimina la pregunta de que aplicación usar. Bajalo desde la siguiente dirección, tendrás que importarlo desde eclipse creando un nuevo proyecto android desde un existing source.
Link alternativo
Y ve directamente a la sección de enlazar zXing con tu aplicación.
O sigue las siguientes instrucciones:
Como dice el tutorial anterior, lo primero es obtener el /core y /android del proyecto zXing, que son los que nos harán falta para usarlos en nuestra aplicación, para ello los descargamos desde el repositorio de svn de google code, tal y como explique en el anterior tutorial sobre la configuración de la librería.
Configuración como librería
Ahora bien, la cosa está en que necesitamos meter la parte de /android como un proyecto dentro de nuestro eclipse, y de la manera que explicamos antes no ocurre eso, sino que lo tenemos to ahí apegotonao en un proyecto llamado svn, pero podemos aprovecharlo! ¿Cómo? Muy fácil, copiando el proyecto de /android desde el explorador de Windows a otra carpeta, para tenerlo separado.
Una vez hecho eso, nos vamos al eclipse y elegimos crear un nuevo proyecto de android, escribimos en el nombre zXing por ejemplo, y elegimos la opción de crearlo desde un existing source y finish.
La cruz roja no os debería salir xD |
Ahora con el proyecto creado pinchamos con botón derecho y elegimos team>disconnect y yes, para que nos limpie todo el tema de svn, que no nos interesa tenerlo molestando. Si no os da la opción de disconnect mejor, no teneis que hacer este paso xD.
Aparcamos nuestro proyecto eclipse recién creado y nos vamos a compilar el /core, para ello podemos hacer lo mismo que expliqué en el manual anterior de configuración, navegamos hasta la ruta del core y ant clean build-no-debug, o ant build export para versiones recientes y así tendremos nuestro core.jar.
A continuación nos vamos a configurar el build-path (pincha encima del proyecto con botón derecho>build path>configure build path)y le damos a añadir external jars y metemos el core.jar que acabamos de compilar.
Ahora pinchamos con botón derecho en el proyecto>propiedades>android y marcamos el checkbox de abajo que pone Is library. Porque vamos a usar nuestro proyecto como una librería.
Tras este paso, si no os da estos problemas, sois afortunados, porque a mi si que me los dio!
Solución algunos problemas
Solución algunos problemas
Primero, una opción en el manifest del proyecto, la de android:xlargeScreens="true", no sé porque me petaba el proyecto (por algo del SDK 2.2), así que coméntala si es necesario para que no de por culo.
Ahí no acaba la cosa, ahora tendrás un error al haber convertido el proyecto en librería, los cases de los switchs te darán error, ¿Por qué? Por esto, para arreglarlo situa el ratón encima de cada switch (thx zoack xd), y pulsa control+1, y elige la opción de convertir los switchs en ifs, y esto estará listo.
Añado un aporte que Juan Carlos hizo en los comentarios, si tras esto algunos @overrides te dan errores, prueba a bajar la versión de JDK a la 1.6.
Añado un aporte que Juan Carlos hizo en los comentarios, si tras esto algunos @overrides te dan errores, prueba a bajar la versión de JDK a la 1.6.
Si te sigue dando algún error, elige Project>clean para que regenere el R.java y ya debería funcionar!
Enlazar zXing con tu proyecto
Hemos acabado de configurar la librería, ahora nos vamos a configurar nuestro proyecto de aplicación, asi que botón derecho>propiedades>android y abajo del todo elegimos la opción de add y debería aparecer nuestra librería zXing recién creada, la añadimos.
Además también tenemos que añadir el core.jar al build-path, como hicimos con el proyecto de la librería zXing.
(Si has saltado a este paso directamente y estas usando mi proyecto subido, asegúrate de que en el proyecto de la librería zXing está el core.jar en el build-path y que en la sección de android esta marcado como Is Library )
(Si has saltado a este paso directamente y estas usando mi proyecto subido, asegúrate de que en el proyecto de la librería zXing está el core.jar en el build-path y que en la sección de android esta marcado como Is Library )
Ahora en tu aplicación, que tu botón lance esto:
Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, 0);
Y el siguiente método para obtener los resultados desde la misma activity:
public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == 0) { if (resultCode == RESULT_OK) { String contents = intent.getStringExtra("SCAN_RESULT"); String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); // Handle successful scan } else if (resultCode == RESULT_CANCELED) { // Handle cancel } } }
Por ultimo tenemos que añadir en el manifest de tu aplicación la información sobre el SCAN de zXing, asi que pega esto:
<activity android:clearTaskOnLaunch="true" android:stateNotNeeded="true" android:configChanges="orientation|keyboardHidden" android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter > <action android:name="com.google.zxing.client.android.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Por último dale permisos a tu aplicación para usar la cámara con esto:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
Prueba a añadir también lo siguiente si la cámara te da problemas, no se abre, se cierra con error, etc, las primeras veces que lo use no me resulto necesario, pero la última vez que lo probé, con esto se me arreglaron los problemas.
<uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" />
Bien, con esto ya lo tendrás funcionando pero hay 3 cosas que aún se pueden mejorar.
Mejoras extra
Primero, cuando pulses el botón de menú dentro del scanner, te aparece un menú de opciones, el cual si pulsas alguna opción petará, además el nombre de la aplicación del scanner sobreescribirá el tuyo, y por último cada vez que pulses el botón se te dará la opción de que aplicación usar para escanear el código, resultando un tanto molesto ¿Como arreglar estos problemas?
Para lo del menú, tan fácil como irnos al CaptureActivity.java del paquete com.google.zxing.cient.android y comentar 3 métodos, el onCreateOptionsMenu(Menu menu), el onPrepareOptionsMenu(Menu menu) y el onOptionsItemSelected(MenuItem item), con eso eliminaremos la función de menú.
Para lo del nombre, nos vamos a res/values/ y para los strings.xml cambiamos el string app_name por el de nuestra aplicación, eso deberíamos hacerlo para todas las carpetas values-xx, o borralas todas y dejar solo la de values..., según la gana que tengas xD.
Edito:
En principio la idea de tener varias values-xx, es para personalizar los distintos strings.xml en función del idioma del dispositivo, pero si solo quieres el nombre de tu aplicación o no te interesa traducir los textos a distintos idiomas, basta con tener tu values/strings.xml.
En la librería zXing sí usan este sistema de traducción, así que si quieres mantener tu nombre de aplicación para un dispositivo en español por ejemplo, tendrías que modificar el strings.xml de la values por defecto, y la de la values-es, pero si el dispositivo esta en inglés te seguiría saliendo lo de Barcode Scanner, por que pillaría el values-en/strings.xml.
Conclusión, si quieres que se mantenga para todas tienes 2 opciones, o borras todas las values-xx, como mencionó arriba, o modificas individualmente cada app_name de cada xml.
La ventaja de la primera, más rapidez, pero si usas algo más de librería zXing que pille un string del strings.xml, solo saldrá el que tengas (que por defecto es inglés), así que tu decides.
En la librería zXing sí usan este sistema de traducción, así que si quieres mantener tu nombre de aplicación para un dispositivo en español por ejemplo, tendrías que modificar el strings.xml de la values por defecto, y la de la values-es, pero si el dispositivo esta en inglés te seguiría saliendo lo de Barcode Scanner, por que pillaría el values-en/strings.xml.
Conclusión, si quieres que se mantenga para todas tienes 2 opciones, o borras todas las values-xx, como mencionó arriba, o modificas individualmente cada app_name de cada xml.
La ventaja de la primera, más rapidez, pero si usas algo más de librería zXing que pille un string del strings.xml, solo saldrá el que tengas (que por defecto es inglés), así que tu decides.
Para lo tercero tenemos que modificar 3 archivos, primero el Intents.java de com.google.zxing.client.android, cambiando el String ACTION de Scan com.google.zxing.client.android.SCAN a la de tu proyecto, por ejemplo, si tu proyecto esta en com.pepino.prueba, tendrás que ponerlo como com.pepino.prueba.SCAN, este mismo cambio hay que hacerlo en el nombre del intent-filter ACTION del manifest.xml de la librería de zXing y también en el de tu proyecto, NO CAMBIAR el nombre de la actividad asociada en el android:name. Y por supuesto ahora cuando llames al Intent de scaneo debes hacerlo con tu nuevo ACTION, es decir, com.pepino.prueba.SCAN.
Por cierto, si vais a leer códigos qr, quizás os interese modificar en com.google.zxing.client.android.camera la actividad CameraManager.java, el método getFramingRect(), la línea de:
int width = screenResolution.x * 3 / 4;
cambiando el 3 por un 2, así conseguiremos que el rectángulo que se forma para reconocer los códigos parezca más un cuadrado xD, un tanto cutre pero funciona.
Otra mejora interesante para los QRadictos, por defecto el layout de la cámara del zXing está hecho para que se use en modo landscape, pero si queremos por ejemplo leer solo códigos QR (como es mi caso), puede que nos interese ponerlo en modo portrait.
Tras investigar por la librería no encontré una manera rápida de hacer esto (por lo que tuve viendo requeriría bastante curro, si alguien encuentra una forma fácil que lo comente!), así que se me ocurrió a probar a leer un código directamente poniendo el móvil en forma portrait, aunque el layout sigue siendo landscape y... funciona igual!
Así que el único problema que tenía era el texto de estado que aparece a la izquierda, pero por suerte android tiene un setVisibility(), así que tan fácil como irnos al CaptureActivity.java, al método onCreate(Bundle icicle) y añadir justo debajo de la línea:
statusView = (TextView) findViewById(R.id.status_view);
la siguiente:
statusView.setVisibility(View.INVISIBLE);
Para la revisión 2099 y probablemente posteriores, esta línea hay que añadirla modificando el método resetStatusView(), donde pone a Visible el statusView, ponerlo a INVISIBLE, y listo.
En el método onCreate comenta la línea siguiente para evitar que lance la ayuda.
showHelpOnFirstLaunch();
Si queréis cambiarle el sonido al "obturador" de la cámara, para ello nos vamos al BeepManager.java al método buildMediaPlayer(Context activity) a la línea de :
AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);//beep original
Y cambiamos el R.raw.beep por nuestro sonido, que tenemos que haber puesto previamente en el directorio raw, y accedemos a él con R.raw.nombre, así de fácil tendremos nuestro sonido custom!
Errores Comunes
E/AndroidRuntime(848): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.google.zxing.client.android.SCAN
Estas lanzando el Intent del scanner con un nombre de ACTION incorrecto, que no se corresponde con el que aparece en el manifest de tu proyecto, en el de la librería zXing o en el de la clase Intents.java . Dicho ACTION debe ser igual en todos los sitios. Por defecto es "com.google.zxing.client.android.SCAN"
E/AndroidRuntime(946): java.lang.VerifyError: com.google.zxing.client.android.CaptureActivity
El core.jar que has importado al proyecto de tu aplicación no se corresponde con la versión de la librería zXing.
E/AndroidRuntime(1214): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.android.prueba/LINEAMODIFICADA.CaptureActivity}: java.lang.ClassNotFoundException: LINEAMODIFACADA.CaptureActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.prueba-1.apk]
La línea del manifest de tu proyecto que indica que clase esta asociada al intent action que lanzas no esta bien configurada, debe ser esta: android:name="com.google.zxing.client.android.CaptureActivity". En el ejemplo de arriba el error sería LINEAMODIFICADA.
class-not-found-when-using-zxingz
Usando la tercera solución de este link, el compañero Rafa consiguió arreglarlo:
http://stackoverflow.com/questions/11959091/class-not-found-when-using-zxing
Explicación en ingles:
Your jar is not in the /libs folder. This happens when you have added the jar to the build path, but newer versions of ADT need it to be in /libs. Put it there and re-add it to the build path.
Un saludo!
mi primer comentario spam, iba a borrarlo pero lo voy a dejar como recuerdo xD
ResponderEliminarMuy muy bueno el tutorial!! La verdad es que me he pegado con los mismos errores yo sola, pero la última parte de consejos está muy bien, por que odiaba eso de tener que elegir la aplicación a usar =S
ResponderEliminarBuenas,
ResponderEliminarMuchas gracias por comentar y por los agradecimientos, la verdad es que me dio bastante jaleo poder incorporar la dichosa libreria en mi aplicacion aunque ha merecido la pena.
Y la parte de consejos me parecio bastante interesante añadirla pprque mejoran bastante la integracion en tu propia aplicacion, seguramente se podran mejorar algunas cosas mas aunque ahora lo tengo algo dejao, asi k ya sabes si descubres algo interesante no dudes en comentarlo!
X cierto n unos dias añadire cm modificar el sonido para cuando detecta un codigo, bastante sencillo y muy util!
Un saludo
Hola Jstyl_8, la verdad es que es un tutorial muy bueno pero por desgracia yo soy demasiado torpe y me sigue dando problemas jejeje, ¿serias tan amable de colgar el proyecto en un zip para poder bajarlo y asi ver donde tengo los fallos?
ResponderEliminarMuchas gracias por tu trabajo y un saludo.
Hola, anonimo xD
ResponderEliminarAqui os dejo el proyecto de eclipse de la librería, este es el que tenéis que usar en vuestra aplicación, seleccionandolo en la parte de propiedades>android>add
http://www.megaupload.com/?d=3ZMZZ6EI
Espero que os sea de utilidad.
Un saludo.
Jstyl_8, muy buen trabajo, me ha sido de mucha utilidad :D gracias!
ResponderEliminarSALUDOS SOY DE ECUADOR ESTOY EMPEZANDO EN LA PROGRAMACIÓN ANDROID MUY BUENO EL POST COMO PODRIA AGREGARLE ESTE PROYECTO A UNA APLICACION EN ECLIPSE DONDE ESTE UN BOTON Y UN TEXTVIEW AL MOMENTO QUE PULSO EL BOTON LA CAMARA ME LEE EL CODIGO QR Y EN EL TEXTVIEW ME APARECE LO QUE LEE PODRIAN SER NUMEROS. ME AYUDARIAS MUCHO GRACIAS DE ANTEMANO.
ResponderEliminarBuenas,
ResponderEliminarNo sé si te has leído la entrada pero está todo explicado en la misma, si no lo entiendes, mírate mejor algún tutorial de Android y luego vuélvete a pasar por aquí.
Un saludo.
PD: Evita las mayúsculas
PD2:Mi primer hoygan!
Muchas gracias, es un gran aporte.
ResponderEliminarQuería comentar un problema que tengo,he creado mi proyecto,en el emulador funciona perfectamente, pero en el telefono solo falla la llamada al lector qr la primera vez después de ser instalado. Después de fallar esta primera vez, funciona correctamente, hasta que desintalo e intalo la aplicación. ¿alguien más tiene este problema y sabe solucionarlo?
Hola, estoy teniendo este mismo problema....Alguien mas lo ha detectado??? Sabéis a que se debe??? Muchísimas gracias!!!
EliminarPEP LLUIS SOLUCIONASTE EL PROBLEMA?? ME IRIA MUY BIEN LA RESPUESTA! GRACIAS!!
EliminarHola PEPLLUIS,
ResponderEliminarEl problema que comentas la verdad que nunca me lo ha dado, y no sé porqué puede ser.
Investiga en el LogCat en tu emulador de android, a ver si pone algún warning, la primera vez que se ejecuta el lector QR, (imagino que será cuando se lanza la actividad de scaneo del zXing desde tu aplicación).
Échale un vistazo y me comentas a ver.
Un saludo
Saludos muy buen tutorial, me ha sido de mucha utilidad y los consejos también, tengo una duda el momento de presionar el botón que me lanza el intent me abre la cámara me escanea y me aparece una pantalla con la información y en la parte inferior tres botones (Búsqueda web, Compartir por Correo Electrónico, Compartir por SMS) pero lo que necesito es que me cargue el contents en un AutoCompleteTextView directamente le agregado este código al método pero no me ejecuta?
ResponderEliminarpublic void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
Intent i = new Intent(this, Result.class);
i.putExtra("lectura", contents);
startActivity(i);
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
Te agradecería mucho la ayuda
Buenas Juccis,
ResponderEliminarLo primero, que supongo que habrá sido un fallo al copiar el código, le falta una llave de cierre al método.
Luego, imagino que el problema es que no te lanza el Intent i, lo primero comprueba que lanzas el startActivityForResult con el código 0, para que cuando haga el if(requestCode==0) lo supere.
También prueba al crear el intent hacerlo como sigue:
Intent i = new Intent(claseActual.this,Result.class);
Es decir, en vez de solo this, ponle el nombre de la clase desde donde estas lanzando el intent antes.
Mira a ver si te funciona así y me cuentas.
Un saludo.
Muchas gracias por el post! Seguí el tutorial en inglés pero me daba fallos en el proyecto que no sabía solucionar, porque eclipse se quejaba de que no encontraba los recursos R.id.XXX en vez de decirte que ya no se pueden usar en un switch -_-
ResponderEliminarEn fin, que muchas gracias porque he encontrado exactamente los mismos errores que tú.
Por cierto, para que salga el nombre de tu aplicación en vez de Barcode Scanner es mejor aún borrar todos los app_name de values-XX/strings.xml del proyecto, así su Manifest coge tu app_name
ResponderEliminarBuenas,
ResponderEliminarAnónimo1 - Pa servir!, pero sí, efectivamente, al pasar el proyecto a librería no pue usar los R.id.xx en los switchs porque no son constantes.
Anónimo2 - Cierto, ese sistema también funciona, aunque requiere más paciencia para ir borrando la línea de cada .xml, he añadido en el tutorial algo más de explicación sobre esa parte incluyendo tu apunte.
Un saludo y gracias!
jstyl8 Realmente muchas gracias me has ayudado mucho con el programa que quiero hacer, me he quedado un poco ya que le he aumentado una opción como se muestra en esta imagen:
ResponderEliminarhttp://www.imagengratis.org/?v=juccisprogram.jpg
Como podría hacer para si es que elijo en el radio button códigos QR me seleccione directamente por un ejemplo la aplicación QR Droid y si por el contrario elijo Código de Barras me seleccione la aplicación Barcode Scanner directamente sin necesidad de estarla seleccionando la yo.
En la parte superior explicas que seria cambiando esta linea com.google.zxing.cient.android.SCAN con la de tu proyecto me gustaría saber como hacer ya que ahora necesito dos aplicaciones externas a mi proyecto para que me lean los codigos (QR Droid, Barcode Scanner)Muchas Gracias!!
Buenas Juccis,
ResponderEliminarPor lo que he podido entenderte (supongo que no eres español xD), necesitas leer codigos QR y codigos de barras "clásicos".
Para ello no necesitas usar 2 aplicaciones distintas como dices, la librería zXing permite leer códigos QR y de barras (aparte de otros), simplemente basta con lanzar el intent de la zXing como comento en la entrada, pero usando el método .putExtra de la siguiente manera:
intent.putExtra("SCAN_MODE");
(Quitándole el segundo parámetro). Con esto capturará todo los tipos de códigos que es capaz de leer (incluyendo QR y 1D Barcode).
Supongo que eso resuelve tu problema, como digo, no es necesario usar 2 aplicaciones distintas, zXing puede con todo xD.
Tienes mas info aquí:
http://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/Intents.java
Un saludo!
Buenas.
ResponderEliminarLo primero MUCHISIMAS GRACIAS por el articulo. Estoy con una aplicacion en la que queria incorporar codigos de barras y me ha venido al pelo!!!.
Queria hacer una pregunta. Ya he incorporado la libreria a mi proyecto y realiza la llamada al lector de codigos, pero este sale como "descuadrado". Ya utilizaba Barcode Scaner antes y ahi aparecia correctamente la caja con la linea roja, pero al llamar al de la libreria, la caja con la linea roja aparecen movidas y la camara no enfoca bien los codigos. A ti supongo que te aparecera bien, te han comentado este problema???
Estoy haciendo las pruebas con un Samsung Galaxy S.
Muchisimas Gracias !!!
Buenas Fernando,
ResponderEliminarGracias por las gracias! xD
Mis móviles de pruebas fueron un HTC Desire y justamente un Samsung Galaxy S y no tuve los problemas que comentas.
Se me ocurre que quizás se deba a la versión de la librería zXing que estas usando, prueba a bajarte la última revisión del repositorio o a una anterior si ya estas usando la última.
Si te sigue dando problemas bajate la del enlace que puse, que es la que estoy usando yo y me va bien.
http://www.megaupload.com/?d=3ZMZZ6EI
Un saludo!
Buenas de nuevo.
ResponderEliminarSigo atascado en el mismo punto grrrrrrrrrrrr. Adjunto pantallazo para aportar mas pistas XD al misterio: http://imageshack.us/photo/my-images/838/20111210171709.jpg/
He probado con la version que esta en el trunk del proyecto y con la de la carpeta tags (1.5) y con las 2 me pasa lo mismo, es como si tuviera el zoom puesto. He probado en otro telefono y pasa igual.
Estoy probando con tu proyecto, pero al añadirle mis core.jar (he probado con el de la rama principal y el del generado para la 1.5) se producen un monton de fallos en el codigo. Podrías subir tu core.jar ??? Es lo unico que me
De nuevo muchisimas gracias, espero no tener que darte mas la brasaaaa!!!
Saludosss
Buenas Fernando,
ResponderEliminarPues sí que es raro, aunque el estilo de las letras del statusView a mi no me sale de esa manera xD, pero bueno, ahí te dejo el core.jar que estoy usando y me funciona, a ver si se te arregla.
http://www.megaupload.com/?d=EJEF9WR8
Un saludo
Buenas!!!
ResponderEliminarSe empieza a esclarecer el misterio o por lo menos saber el ¿por que???? No es por mi proyecto, ni por el core.jar con el tuyo me pasa lo mismo....La culpa es de ....Android y sus multiples versiones XD.
En mi Samsung Galaxy S pasa eso porque tengo la version 2.3.3 instalada. He probado con el mismo apk en otro telefono con otra vesion y funciona a la perfeccion!!!!
Ahora que la cosa esta mas acotada voy a ver si consigo solucionarlo y que funciona para esta version tambien.
Muchisimas Gracias !!!
Hola de nuevo,
ResponderEliminarLas distintas versiones de android siempre dando por culo xD. En el que yo lo probé tenia la 2.1 creo recordar.
Si encuentras alguna manera de que funcione en esa version comentamelo que la compatibilidad es importante xd
Un saludo!
hola que tal gracias por el tutorial, y pos bueno tengo algunos problemas al ejecutar el programa, no se si alguien me podría ayudar con el código de la aplicación funcionando con la librería incluida, disculpen si es mucho abuso, pero en verdad ya voy como mas de 5 veces intentando hacer la aplicación y siempre me da algún problema, mi correo: katanajmusik@hotmail.com, también quisiera saber si para ejecutar el lector de qr, tengo ke tener instalado algún programa en el emulador???
ResponderEliminarde antemano gracias y perdón por el abuso y la dirección de correo.
Buenas Paulo,
ResponderEliminarTe recomiendo que antes de ponerte a trabajar con lo del zXing te veas algún tutorial de android y demás, como los de TheNewBoston que puedes encontrar en youtube, porque el tutorial esta relativamente claro y por mi parte no dispongo de tiempo ultimamente para consultas personales xDD
Respecto a lo del lector QR, no termino de comprender la pregunta, que lector QR?¿, en el emulador se instala el .apk de tu proyecto que te genera eclipse, de hecho, lo hace el eclipse solo cuando le das a lanzarlo, así que no necesitas nada más que tu proyecto de eclipse instalado en el emulador.
Un saludo
Buenas....
ResponderEliminarHace tiempo escribi por aqui que tenia problemas con ciertas versiones de android, ya que al llamar al zXing salia el visor de escaner descuadrado...Pues bien parece que he solucionado el problema.
He modificado mi AndroidManifest de mi programa principal y he añadido lo siguiente:
Con esto se pinta correctamente!!!!
Me ha costado Dios y ayuda encontrar la solución asique espero que esto ayude a más gente con este problema.
Saludos.
Uy que parece que no ha salido.
ResponderEliminarEsto es lo que he añadido:
uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"
hola que tal de nuevo disculpas la molesta, porfin encontre el erro en mi aplicacion y por eso no me aparecia el escaner en el manifest en vez de DEFAULT le puse LAUNCHER y listo!!, bueno aki va la pregunta, en el manifest se accede en forma directa al com.google.zxing.client.CaptureActivity, pero yo kisiera saber si en vez de acceder directamente al CaptureActivity se puede acceder primero a la activity donde esta mi boton, luego al captureActivity para obtener la informacion del codigo y al final ir a otra activity con la informacion obtenida?? en cristiano seria: CaptureActivity se ejecute despues de otra activity y ke a su vez se dirija a otra activity ya ke en post del uso de zxing la aplicacion accede en forma directa al scanner y no a la opcion del boton.
ResponderEliminar2. disculpando el abuso, como elimino los botones de (Búsqueda web, Compartir por Correo Electrónico, Compartir por SMS) cuando se ejecuta el scanner?
Hola, te tengo una pregunta el LAUNCHER lo cambias en el intent que tiene el SCAN o el MAIN? gracias
EliminarFernando gracias por la info! Intentare eso en un problema que me estaba dando en móviles más nuevos, porque me esta puteando el zXing ahora xD
ResponderEliminarPaulo, la gestion del CaptureActivity hasta donde yo se, tie k ser lanzandola con un startActivityforResult, es decir que tu llamas a Capture desde una actividad X y al volver del CaptureActivity el resultado se gestiona desde esa actividad X.
En el post se accede al captureActivity cuando se pulsa el boton, el boton está para poder lanzar la actividad de captura.
Respecto a lo segundo esta explicado en el post, justo es la primera "mejora" que comento que se puede hacer a la aplicación, cito:
Para lo del menú, tan fácil como irnos al CaptureActivity.java del paquete com.google.zxing.cient.android y comentar 3 métodos, el onCreateOptionsMenu(Menu menu), el onPrepareOptionsMenu(Menu menu) y el onOptionsItemSelected(MenuItem item), con eso eliminaremos la función de menú.
Un saludo!
Buenas.
EliminarEspero que te haya servido, a mi me costo lo mio encontrar la solucion jeje.
Bueno, si me lo permites queria hacer un poco de spam. Gracias a tu post he podido acabar la aplicacion que tenia entre manos y esta calentita calentita recien subida al market: https://market.android.com/details?id=com.once.escaner.tabWidgetOnce
Saludos y muchas gracias por todo!!!
hola y gracias por responder, se supone que los codigos descritos anteriormente lo que hacen es pulsar el boton e ir a la clase CapturerActivity, pero en el MANIFEST del proyecto, esta una linea de codigo en la parte de que dice:
ResponderEliminarandroid:name="com.google.zxing.client.android.CaptureActiviy", segun tutoriales que he visto al iniciar la aplicacion lo que hace es ke esta linea de codigo me indica ke esta clase es la principal (la primera ke ve el usuario) por ende no ingresa a la clase donde esta el boton, ahora si en vez de esa linea de codigo ponen: android:name=".MiClaseActivity" (el nombre de la clase del proyecto) ahi si, se dirige a la clase donde esta el boton, ahora el problema es como puedo ir a la clase CaptureActivity y obtener la informacion del SCAN desde otra clase ke no sea la principal ????
Hola Yo tengo una duda similar la verdad es que si pongo el android name como el de CaptureActivity no entrará a mi actividad donde tengo el botón y la acción de este. Si ya sabes como solucionarlo me podrías explicar? gracias
EliminarHola, desde hace un tiempo atrás estoy trabajando en una aplicación en donde una de sus funcionalidades es leer códigos de barras, pero para implementar el ZXing en mi proyecto me llevo su tiempo ya que cuando arme el proyecto para usar la librería core.jar, el Eclipse no me generaba el archivo R.java automáticamente y en base a tu experiencia finalmente averigüé que ese problema se debía a que no estaba usando la versión correcta del SDK (usaba la versión 1.6, luego se me ocurrió bajarme la versión 2.2 del SDK que mencionaste) y después de hacer los ajustes necesarios en las propiedades del proyecto, pude arreglar eso.
ResponderEliminarPor cierto, la parte en donde había que cambiar los switchs por ifs no lo pude hacer como decías, pero curiosamente si haciendo clic derecho sobre los switch y eligiendo la opción "Quick Fix".
Buenas paulo
ResponderEliminarNo se porque pero cuando te conteste a tu ultimo mensaje no se guardo y ya se me olvido meterme por aqui.
Para cambiar que clase se inicia al arrancar la aplicación puedes usar un Intent Filter dentro de las etiquetas de la actividad que quieras que se arranque al inicio, tal que asi:
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Para que funcione correctamente tienes que dejar la linea android:name tal como esta, eso solo especifica la "ruta" de la clase que representa la actividad, en este caso donde encontrar el captureActivity del zXing.
Para recuperar la información se usa el método onActivityResult(), cogiendo del intent la información con el getStringExtra().
Echale un vistazo a como vael startActivityForResult y el onActivityResult por esta pagina, a mi me vino bastante bien:
http://developer.android.com/reference/android/app/Activity.html#StartingActivities
Swicher, la opción de Control+1 es simplemente un atajo de teclado para lanzar el Quick Fix, pero como dices si no funciona el atajo, siempre se puede usar el boton derecho del raton y aparecera la opción en el desplegable.
Gracias por el apunte de todos modos!
Un saludo!!
Hola,
ResponderEliminarexcelente tutorial. Lo he seguido al pie de la letra y me funciona todo perfecto siempre y cuando utilice el Barcode Scanner de google. Sin embargo, cuando quiero escanear con el Barcode Scanner de mi proyecto(hago lo que dices en las mejoras) al pulsar el boton no hace nada...
Cuando estaba corrigiendo los errores, aparte de los switch y eso tuve que quitar varios @Overrides que me daban error, ¿tendrá eso algo que ver?¿Por qué puede ser?
Muchas gracias por este gran trabajo ;-)
Buenas,
ResponderEliminarPrimero gracias y segundo aclararte que el Barcode Scanner no es de google, es una aplicación del proyecto Zebra Crossing (zxing).
La parte de las mejoras no es necesaria para que funcione, de ahí que sean mejoras, añadidos, sin hacer estas "mejoras" debería funcionarte de todos modos.
Revisa el LogCat para saber porque pasa ese "no hace nada", normalmente revisarlo suele darte pistas sino la solución de porqué algo no funciona (sino sabes que es eso de LogCat, en unos días haré un tutorial explicando su uso, pero resumiendo es la "consola de Android" que te dice lo que estaba pasando en el dispositivo en cada momento, informandote tambien de los errores).
Lo de los overrides no creo que sea, probablemente se deba a que al comentar los métodos del menu y demas no comentaste también esa etiqueta, y te da error porque no hay nada que "override".
Revisa el logcat y me cuentas, o dame más información por que asi de primeras no se que puede ser.
Un saludo!
Hola,
ResponderEliminargracias por contestar tan rápido. Te explico lo de los @overrides que ayer conseguí resolverlo, por si quieres comentarlo en el artículo que a lo mejor no soy el único que se lo encuentra jaja.
Cuando estamos eliminando los errores, tras pasar los switch a if-else a mí me seguía dando errores. Todos eran en los @overrides de algunos métodos de la librería que creamos y me decía que tenía que eliminarlos. Al parecer esto sucede cuando no estás trabajando con la versión 1.6 del jdk de java (yo trabajaba con 1.7)
Ahora trabajo con el jdk 1.6 y ni rastro de estos errores.
Respecto a lo de que "no hace nada" tienes razón, no me he pegado con el logcat aún así que como si no hubiese dicho nada jajaja. Si veo que no lo arreglo vuelvo por aquí :P
Un saludo y muchas gracias por este magnífico artículo.
Hola Gran Tutorial Jstyl_8,
ResponderEliminarTengo un problema y es que no me importa bien el /android del Zxing me sale el proyecto vacio, agradecería si puedas colgar el zip con el proyecto ya que he visto que lo pusiste pero estaba en megaupload xDD
Un saludo
Cierto R, maldito fbi, porque cojones tiene que borrar cosas que no son ilegales! Pero bueno, ahora lo he subido a un servidor propio, pa que no de más follones.
ResponderEliminarLa versión que he subido usa la revisión 2099 del repositorio de zXing, podeis bajarlo desde el siguiente link.
http://www.hidelinks.com/?v2yjt0erng
Cuando os pida pass poner 'zxing' sin las comillas.
Un saludo!
Hola Jstyl_8
EliminarHe seguido todos los pasos de tu manual pero cuando voy a ejecutarlo en el emulador me sale este error.
E/Database(418): sqlite3_open_v2("/data/data/net.desplazar/databases/barcode_scanner_history.db", &handle, 6, NULL) failed
android.database.sqlite.SQLiteException: unable to open database file zXing en la clase CaptureActivity.java
¿Cuál puede ser el problema?
Gracias
Pues ni idea porque puede darte ese error, normalmente te dice la ruta completa del fallo el LogCat, revisalo en la linea de código de tu proyecto a ver.
EliminarA mi fallos con la base de datos esa nunca ma dao, asi que como no sea por algo de como lo usas no sé.
Un saludo.
Por cierto se me olvido comentarte,
ResponderEliminarLa he probado en un teléfono y aparece la pantalla del escaneo la acerco a un código de barras suena como un click pero no hace nada.
¿Es normal?
¿Como puedo hacer para que vuelva a la aplicación original con el número de código de barras?
La vuelta a la aplicación tras escanear el código de barras es automática, de ahí lo de usar el startActivityForResult para lanzar el escaneo, y tratar el resultado en el onActivityResult() mediante el getStringExtra().
EliminarEl código que aparece permite solo escanear códigos QR, si quieres otro tipos de códigos tienes que cambiar el segundo string que le pasas al putExtra, (PRODUCT_MODE,ONE_D_MODE, etc) si quieres que escanee todo, no le pongas ningun putExtra.
Tienes más info sobre eso en el Intents.java de la libreria.
Revisa a ver si el código que escanees concuerde con el código que tienes "prefijado" en el código.
Un saludo!
Gracias Jstyl_8,
EliminarYa conseguí que funcionará :)
Jstyl_8
ResponderEliminarUna pregunta, ¿Existe la posibilidad de que no te pida instalar la aplicación barcode scanner cuando lo utilizas?
Justamente este sistema de integrar zXing consigue eso, no depender de la aplicación externa Barcode Scanner.
EliminarSi te lo pide algo raro esta pasando xD, porque el sistema de usar zXing que te obliga a instalar la aplicación externa es este:
http://jstyl8.blogspot.com/2012/01/zxing-integracion-en-tu-proyecto-usando.html
Un saludo!
Hola Jstly_8
ResponderEliminarPerdona se me olvido mencionarte que estoy utilizando las clases IntentResult e IntentIntegratos de la librería android-integrator.jar
¿Eso influye?
Si no los utilizo me da el siguiente error por si te sirve de ayuda
ResponderEliminarjava.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.miproyecto/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity in loader dalvik.system.PathClassLoader
Como te he comentado mas arriba, si haces uso de esas clases, no consigues integrar completamente zxing en tu aplicación.
EliminarEse sistema solo hace que tu aplicación llame a barcode scanner, una aplicacion externa, como digo, ese sistema esta explicado en el siguiente tutorial:
http://jstyl8.blogspot.com/2012/01/zxing-integracion-en-tu-proyecto-usando.html
El sistema que se explica en este tutorial si integra completamente zxing en tu aplicación, sin necesidad de usar la aplicación externa, sigue los pasos que se marcan y debería funcionar.
Respecto al error que comentas:
Esa excepcion generalmente se da cuando no tienes bien puesto el nombre de una actividad o el intentfilter que estas usando a la hora de lanzarla, en este caso el CaptureActivity, revisa como lanzas la actividad y posiblemente encontraras el error.
Un saludo!
Lo primero gracias Jstyl_8 por tu tiempo y tus respuestas.
ResponderEliminarVoy avanzando poco a poco xD
Ya conseguí que funcionara sin instalar barcode scanner pero ahora escaneo y se me queda en la pantalla con la información y los tres botones abajo (Búsqueda de productos, búsqueda de web y google shopper) como le pasaba a Juccis. Si pudieras poner un ejemplo de como volver a la clase original y como jugar con ese "contents" para poder guardarlo en un textview, edittext etc... ya he utilizado el metodo que puso Juccis y la respuesta que le diste pero tampoco me ha funcionado
Entiendo que escanea el código pero no vuelve a la aplicación original tuya que lanza el scaneo, el problema es que la vuelta debería ser automática, en cuanto detecta el código que sea, vuelve a la aplicación.
EliminarSi ese es el problema y ya has comprobado que el onActivityResult esta correcto, no se porque puede pasar, siento no poder ayudarte en esto xD
Un saludo
Hola, yo tambien estoy teniendo ciertos problemas con la integración. Mi idea es que se abra el escaner desde un activity que no es la principal y al volver en el onActivityResult inicie otra.
ResponderEliminarSi en el manifest de mi proyecto dejo que el Capture Activity sea action.Main, cuando se me abre el escaner se me queda la pantalla azul, con el rectangulo dentro pero no se ve la camara. En cambio, si en vez de lanzarlo desde mi activity pruebo a hacerlo desde la principal si que se abre bien.
¿Que parametros del intent filter habria que poner para poder lanzarlo desde mi activity? He probado a quitar el primero y dejar solo el de scan y me quedo igual, y si en el de scan pongo en vez de default launcher, me va bien pero me abre la app del barcode y eso no es lo que pretendo.
¿Alguna idea?
Muchas gracias
En las pruebas que yo he hecho, al quitar el intent-filter con el action.MAIN del captureActivity en el manifest de mi proyecto directamente me petaba la aplicación al lanzar el scanner.
EliminarAsí que ese intent-filter tiene que estar, pero tienes que lanzar el captureactivity usando el segundo.
Además que según yo tengo hecho no es necesario que la actividad que maneja el startActivityForResult() que lanza el intent del scanner tenga un intent-filter action.MAIN.
En mi caso, mi actividad que lanza el scanner simplemente tiene el intent-filter compuesto por el action correspondiente y la category DEFAULT.
Revisa a ver si tas usando los intent correctamente, porque parece que sea fallo de que tas usando para lanzar el scanner el primer intent-filter en lugar del segundo.
Un saludo
Hola, gracias por tu respuesta. Creo que he descubierto porque me falla y no tiene nada que ver con el intent-filter. Por lo que he podido comprobar, mi activity coge sus datos de una base de datos interna de la app, si accedo a ésta para recuperar los datos y posteriormente inicio el escaner es cuando me sale la pantalla en gris/azul.
EliminarHe lo he probado sin coger los datos de la base de datos y si funciona.
Ya se que esta pregunta no tiene nada que ver con el tema, pero se os ocurre por qué puede ser esto?
Gracias de nuevo
Creo que no tiene nada que ver con la base de datos, ya que he metido unos datos aleatorios y sigue sin funcionar. Más bien parece tener que ver con que estoy haciendo la aplicación para tablets y estoy utilizando Fragments. Al cargar los datos en los fragments es cuando parece que falla...
EliminarVoy a seguir investigando a ver si encuentro el problema.
Gracias!!
Con BD a mi no me ha dao problemas la librería, aunque no se que compatibilidad tiene con tablets, lo que yo he probao a sido siempre en móvil, así que ni idea en ese punto xD, pero si consigues algo coméntalo!
EliminarUn saludorr
Hola amigo, lo primero de todo gracais por tu ayuda, verás después de estar probando miles de cosas sigue sin funcionarme. Me he bajado tu proyecto y lo he importado siguiendo todos los pasos...
ResponderEliminarY me da este error:
E/AndroidRuntime(3529): Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.bervimo.]
He hecho todo lo que he podido pero no he podido solucionarlo, he mirado el manifest, el build path pero todo esta bien.. Estoy algo desesperado, gracias de antemano, un saludo
He resubido el proyecto de mi libreria, podeis bajarlo desde aqui (password zxing)
Eliminarhttp://www.hidelinks.com/?ghvw4k7r2q
Lo he resubido con el Intents por defecto, esto es, sin la mejora que elimina la pregunta de que aplicación quieres usar, asi el manifest y el intents estan por defecto, y es acorde a la explicación que hay en la entrada, El resto de mejoras si las tiene.
Recordad importar el core.jar correcto tanto en tu proyecto de aplicación como en el que yo he subido (dicho core.jar esta en el raiz del proyecto que he subido), si coges otro, seguramente pete porque es otra version!
Además esta configurado para coger la ruta hasta el core.jar de mi pc, que seguramente sea distintos a como tu lo tienes!
Espero que te ayude,
Un saludo!
Hola!
ResponderEliminarHe seguido los pasos fielmente. Con BarEncoder o con cualquier otro lector de QR me funciona perfecto. Si intento utilizar el "mi" lector el programa peta, me dice que se ha producido un error y que fuerce el cierre
Revisa la consola del LogCat y ponme aquí el error que te da para poder ayudarte, siendo tan general puede ser cualquier cosa!
Eliminarte pongo el link a una captura de pantalla ok? gracias por responder :P
Eliminarhttp://img846.imageshack.us/img846/8978/errordg.png
añado de antemano para acelerar esto:
EliminarEn las propiedades del proyecto ZxingLib, está añadido como JAR externo el core.jar al igual que en mi proyecto. También está marcado como librería el ZxingLib. En las propiedades de mi app está añadida la libreria ZxingLib
He actualizado la entrada con errores comunes, creo que el tuyo es que has cambiado la línea android:name del manifest de tu proyecto en lugar del intent-filter.
EliminarPara lo de que no pida que aplicación usar para el scanner, hay que modificar el intent-filter ACTION no esa línea de android:name.
Creo que eso resolverá el problema.
Un saludo!
como puedo bajar tu proyecto si me pide contraseña?????????????????
ResponderEliminarEn la entrada lo pone, la contraseña es zxing
Eliminardisculpa una pregunta ya me corre la libreria y el programa pero a la hora de capturar la lectura del codigo qr no me manda el contenido del qr no sabes por k ????
ResponderEliminarCon esa descripción del problema ni idea.
Eliminarcuando se importa la libreria al IDE y cuando la libreria es importada a un proyecto nuevo, es normal que aparesca un signo de admiracion color junto al icono de la carpeta que esta en el explorador de paquetes, o es algun tipo de error?
ResponderEliminar*color rojo XD
Eliminarresuleto era el core que no lo habia agregado, pero ahora me salio otro problema.
Eliminardespues que la aplicacion entra al scaner y lee el codigo QR este no muestra la informacion contenida en el qr D:
gracias
Como la estas intentando mostrar?
EliminarEl contenido es un String (que se consigue con el getStringExtra() ), asi que si no muestras ese string directamente no va a hacer nada, porque el codigo del onActivityResult() que hay en la entrada solo obtiene el raw del QR leido pero no hace nada con el..
Completa el onActivityResult() mostrandolo en un textview o algo y me comentas
Hola amigazo excelente post muchas gracias me a servido de mucho una pregunta asi como tienes este codigo de lector de qr no te has puesto a hacer un generador de codigos qr y si es asi xfa subele si muchas gracias y excelente trabajo te felicito
ResponderEliminarGracias, justo lo que pides lo tienes en el siguiente enlace:
ResponderEliminarhttp://jstyl8.blogspot.com.es/2012/05/zxing-creacion-de-codigos-qr.html
Un saludo.
W/dalvikvm(1672): VFY:unable to resolve static field 51 (ISSUE_NUMBER) in Lcom/google/zxing/ResultMetadataType;
ResponderEliminarI/dalvikvm(1672): Could not find method com.google.zxing.ResultPoint.getX, referenced from method com.google.zxing.client.android.CaptureActivity.drawLine
Tengo puesto en referenced libraries en los dos proyectos el core.jar
Alguna idea?
Perdona por ser tan descortés. Gracias por tu post y saludos desde Tenerife.
EliminarTiene toda la pinta que estes usando un core.jar distinto de la versión del proyecto zXing importado, por eso te dice que no encuentra un metodo que se referencia desde el CaptureActivity, tienen que ser ambos de la misma versión.
EliminarMe baje la versión que pusiste disponible para descarga y el jar que utilizo es el que está en el raíz del comprimido. Cuando cargo el proyecto en el Eclipse sólo me da warning de tipo "deprecated" por ejemplo con el tipo clipboardManager. Es verdad que lo estoy lanzando con el emulador no sobre un teléfono pero por los errores yo también entiendo como que no coje el core. algo me falla y no sé que es. De nuevo muchas gracias por tu generosidad en la expansión del conocimiento.
EliminarHe vuelto a bajarme el proyecto y lo he probado otra vez y me funciona, enlazando el core.jar que viene en la raíz.
EliminarNo me dice nada de warnings, prueba a cambiar el jdk al 1.6, creo que a alguno le ha funcionado y a poner la libreria con android 4.0 si no esta ya puesta.
Si no te va, a saber, versiones de android de java manifest, puedes probar a usar una nueva revisión de la librería zxing que quizás corrija más bugs...
un saludo.
Hola, Gracias por el y los post anteriores.
ResponderEliminarHe llegado a realizar todos los pasos pero al momento de probar en mi cel q es el Galaxy Nexus, me salen errores, el primero de ellos es ;
06-20 16:18:46.644: E/AndroidRuntime(6515): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxx.qr/com.xxxx.qr.ZXingDemoActivity}: java.lang.NullPointerException
06-20 16:19:36.909: E/AndroidRuntime(6586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
Probe con el jdk 1.7 y me descargue el 1.6. Tb uso el android v14, y lo demás parecer igual.
Tb ahora ya no se puede descargar del megaupload, que es donde tenias tu proyecto, podrás subirlo a otro link.
Gracias y felicitaciones
Si has revisado la entrada, tras el cierre de Megaupload, el proyecto lo subí a otro host.
ResponderEliminarRespecto a ese fallo, ni idea, pero lo de demoActivity me suena raro, como si estuvieras ejecutando otra cosa...
Un saludo.
me sale un error en
ResponderEliminar<manifest xmlns:android="http://schemas.android.com/apk/res/android"
Es un fallo del xml, y el propio xml te suele decir que es lo que falla, revisa la línea del error.
EliminarHola, me gustaria saber a ver si podriais ayudarme. Veras me gustaria cortejar el rawResult con una base de datos (en mi caso tiene que ser la de la propia libreria ya al llamar a la libreria si creo una en mi aplicacion no se genera y no se porque pero bueno caso a aparte) y que esta de devuelva un resultado (ya sea en el propio raw o lo que sea) pero esta tonteria no consigo que me funcione alguna idea?? Por favor es urgente si me contestasen se lo agradeceria
ResponderEliminarYo no entender tu pregunta.
Eliminargenio! veo q tenes la panacea del zxing, te pego mi logcat y me ayudas? mi aplicacion ejecuta en mi celu, pero cuando apreto el boton scan salta la interrupcion del proceso...
ResponderEliminar09-05 12:18:12.230: E/AndroidRuntime(32737): FATAL EXCEPTION: main
09-05 12:18:12.230: E/AndroidRuntime(32737): java.lang.ExceptionInInitializerError
09-05 12:18:12.230: E/AndroidRuntime(32737): at java.lang.Class.newInstanceImpl(Native Method)
09-05 12:18:12.230: E/AndroidRuntime(32737): at java.lang.Class.newInstance(Class.java:1409)
09-05 12:18:12.230: E/AndroidRuntime(32737): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
09-05 12:18:12.230: E/AndroidRuntime(32737): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1573)
09-05 12:18:12.230: E/AndroidRuntime(32737): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
09-05 12:18:12.230: E/AndroidRuntime(32737): at android.app.ActivityThread.access$1500(ActivityThread.java:121)
09-05 12:18:12.230: E/AndroidRuntime(32737): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
09-05 12:18:12.230: E/AndroidRuntime(32737): at android.os.Handler.dispatchMessage(Handler.java:99)
09-05 12:18:12.230: E/AndroidRuntime(32737): at android.os.Looper.loop(Looper.java:123)
09-05 12:18:12.230: E/AndroidRuntime(32737): at android.app.ActivityThread.main(ActivityThread.java:3701)
09-05 12:18:12.230: E/AndroidRuntime(32737): at java.lang.reflect.Method.invokeNative(Native Method)
09-05 12:18:12.230: E/AndroidRuntime(32737): at java.lang.reflect.Method.invoke(Method.java:507)
09-05 12:18:12.230: E/AndroidRuntime(32737): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
09-05 12:18:12.230: E/AndroidRuntime(32737): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
09-05 12:18:12.230: E/AndroidRuntime(32737): at dalvik.system.NativeStart.main(Native Method)
09-05 12:18:12.230: E/AndroidRuntime(32737): Caused by: java.lang.NoClassDefFoundError: com.google.zxing.ResultMetadataType
09-05 12:18:12.230: E/AndroidRuntime(32737): at com.google.zxing.client.android.CaptureActivity.(CaptureActivity.java:102)
09-05 12:18:12.230: E/AndroidRuntime(32737): ... 15 more
Pues... ni idea, pero estará aquí:
EliminarCaused by: java.lang.NoClassDefFoundError: com.google.zxing.ResultMetadataType
Hola Jstyl de antemano te agradezco, Muy buen tutorial.
ResponderEliminarNecesito hacerte una pregunta
Al momento de compilar Me salen 2 tipos de error Tu sabes que puede ser?
Al momento de Correrlos
could not get wglGetExtensionsStringARB
y
com.google.zxing.client.android.CaptureActivity] Could not find com.google.zxing.client.android.CaptureActivity.apk!
Te envió una imagen
http://i45.tinypic.com/2i7agd5.png
De ante mano gracias nuevamente!
Lo primero es del emulador, no creo que tenga nada que ver con el zxing, prueba a ejecutar otra aplicación a ver si te sigue saliendo, de todos modos, prueba esto:
Eliminarhttp://stackoverflow.com/questions/11407501/android-emulator-could-not-get-wglgetextensionsstringarb-error
El segundo puede ser que el proyecto de librería zxing no se haya compilado bien, y el apk no se haya generado, revisalo.
un saludo
Sabes si funciona con la librerias del ZXING de la versión 2.0? Gracias porque no me correo ni a patadas...
ResponderEliminarNo tengo ni idea, yo me bajaba directamente las revisiones del repositorio, así que no sé a que revisión corresponderá esa v2.0 que se puede descargar directamente desde el proyecto.
EliminarHola!!
ResponderEliminarPrimero que todo queria felicitarte por el tutorial esta excelente!! sin embargo he tenido algunos problemas , al tratar de ejecutar "mi lector" se cae si uso los instalados funciona perfecto.
aca el link del error: http://imageshack.us/photo/my-images/404/erroreso.png/
Debe ser alguna incompatibilidad entre el core.jar y el proyecto de la librería en si, no puedo decirte más.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarBuenas Jstyl_8. Primero que nada mil gracias por tomarte el tiempo de preparar esta guia y mas aun por la paciencia que implica el responder a las inquietudes y problemas de los mas neofitos como nosotros. Ya entrados en el tema quisiera saber si puedes echarme la mano pues no he podido manejar los resultados del escaneo ya que solo he podido imprimir cuando se "cancela" el escaneo. Anexo la "miserable" manera en que estoy manejando los datos y pues agradezco tu ayuda o la de cualquier buen samaritano que lea esto y disponga de unos minutos.
ResponderEliminarpublic void onActivityResult(int requestCode, int resultCode, Intent intent) {
Eliminarif (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contenido = intent.getStringExtra("SCAN_RESULT");
String formato = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Hacer algo con los datos obtenidos.
textViewPrincipal.append("Resultado del escaneo: "+contenido);
} else if (resultCode == RESULT_CANCELED) {
// Si se cancelo la captura.
textViewPrincipal.append(" Escaneo cancelado! ");
}
}
}
Si no se esta escaneando ningún código nunca entrará con el resultCode OK, así que asegúrate que escaneas un código.
EliminarOtras cosas que puedes probar es que haces el startactivityforresult con el requestcode 0, o prueba el método setText() en lugar del append().
Hola, hice todo el tutorial y tengo una duda cuándo lo pongo a correr el me muestra:
ResponderEliminar[2012-09-29 22:10:04 - android_register] Performing sync
[2012-09-29 22:10:04 - android_register] Automatic Target Mode: Preferred AVD 'Celulito' is available on emulator 'emulator-5554'
[2012-09-29 22:10:05 - android_register] Application already deployed. No need to reinstall
[2012-09-29 22:10:05 - android_register] \android_register\bin\android_register.apk installed on device
[2012-09-29 22:10:05 - android_register] Done!
y no hace ninguna acción. Mi proyecto se llamam android_register y mi activity is la main_Activity no se que puede estar pasando
Pues que la aplicación ya esta instalada en el emulador, y por alguna razón no se ejecuta automáticamente, simplemente usa el emulador para lanzar la aplicación, seleccionándola.
EliminarPrimero gracias por responder. sobre mi duda; eso hago, pero no me aparece en la lista de aplicaciones como para ejecutarla, lo mismo pasa cuando se instala en un celular no hace nada.Intenté lo de cambiar el DEFAULT por LAUNCHER sin embargo no funciona aun.
EliminarTe pasa solo con esta aplicación? O con otras? Si es con otras será problema del emulador y demás, sino coge el manifest de una que funcione y copia todo lo que puedas en la que te da problemas, algunas veces me ha pasado y así se me arregló.
EliminarHola, solo me pasa con ésta. Haré lo que me dices a ver que pasa. Tengo un pregunta sobre el DEFAULT y LAUNCHER. Cuándo se usa cada uno, es que al cambiar éstas observo cambios en mi aplicación.
EliminarGracias por adelantado
En esta web puedes encontrar explicaciones sobre los distintos intent-filter:
Eliminarhttp://developer.android.com/reference/android/content/Intent.html
Con LAUNCHER indicas que esa actividad se debe ejecutar al arrancarse la aplicación.
El DEFAULT es que se ejecute cuando se pulse el botón de home típico, normalmente yo se lo ponía a todas, supongo que habrá algo más por ahí, pero lo desconozco.
muchas gracias, leeré e intentaré organizar todo a ver si funciona
EliminarHola, interesante artículo, yo tengo un problemilla al realizar una aplicación de ejemplo: adjunto log del logcat
ResponderEliminar10-04 13:40:47.092: E/GetJar SDK(32397): PackageMonitor: doOnReceive(): failed
10-04 13:40:47.092: E/GetJar SDK(32397): java.lang.IllegalStateException: Unable to access the application key
10-04 13:40:47.092: E/GetJar SDK(32397): at com.getjar.sdk.data.metadata.PackageMonitor.doOnReceive(PackageMonitor.java:113)
10-04 13:40:47.092: E/GetJar SDK(32397): at com.getjar.sdk.data.metadata.PackageMonitor.access$000(PackageMonitor.java:62)
10-04 13:40:47.092: E/GetJar SDK(32397): at com.getjar.sdk.data.metadata.PackageMonitor$1.run(PackageMonitor.java:87)
10-04 13:40:47.092: E/GetJar SDK(32397): at java.lang.Thread.run(Thread.java:856)
Ojalá me pudieras echar una mano, a que se puede referir? no
encuentra el .jar?
Gracias por adelantado.
Ese error no creo que tenga que ver con zxing, más bien parece del GetJar, como indica el propio logcat, y ese SDK no lo tocao nunca, así que ni idea.
EliminarHola, gracias por su respuesta, la verdad es que no había error ahí. Ahora me salió otro error, el mismo que le salió al compañero lezalel:
ResponderEliminar10-05 11:19:34.479: E/AndroidRuntime(9695): FATAL EXCEPTION: main
10-05 11:19:34.479: E/AndroidRuntime(9695): java.lang.ExceptionInInitializerError
10-05 11:19:34.479: E/AndroidRuntime(9695): at java.lang.Class.newInstanceImpl(Native Method)
10-05 11:19:34.479: E/AndroidRuntime(9695): at java.lang.Class.newInstance(Class.java:1319)
10-05 11:19:34.479: E/AndroidRuntime(9695): at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
10-05 11:19:34.479: E/AndroidRuntime(9695): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
10-05 11:19:34.479: E/AndroidRuntime(9695): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
10-05 11:19:34.479: E/AndroidRuntime(9695): at android.app.ActivityThread.access$600(ActivityThread.java:130)
10-05 11:19:34.479: E/AndroidRuntime(9695): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
10-05 11:19:34.479: E/AndroidRuntime(9695): at android.os.Handler.dispatchMessage(Handler.java:99)
10-05 11:19:34.479: E/AndroidRuntime(9695): at android.os.Looper.loop(Looper.java:137)
10-05 11:19:34.479: E/AndroidRuntime(9695): at android.app.ActivityThread.main(ActivityThread.java:4745)
10-05 11:19:34.479: E/AndroidRuntime(9695): at java.lang.reflect.Method.invokeNative(Native Method)
10-05 11:19:34.479: E/AndroidRuntime(9695): at java.lang.reflect.Method.invoke(Method.java:511)
10-05 11:19:34.479: E/AndroidRuntime(9695): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-05 11:19:34.479: E/AndroidRuntime(9695): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-05 11:19:34.479: E/AndroidRuntime(9695): at dalvik.system.NativeStart.main(Native Method)
10-05 11:19:34.479: E/AndroidRuntime(9695): Caused by: java.lang.NoClassDefFoundError: com.google.zxing.ResultMetadataType
10-05 11:19:34.479: E/AndroidRuntime(9695): at com.google.zxing.client.android.CaptureActivity.(CaptureActivity.java:107)
10-05 11:19:34.479: E/AndroidRuntime(9695): ... 15 more
Según eso el error está en la línea marcada con * pero no sé como solucionarlo, ¿tienes alguna idea?
private static final Set DISPLAYABLE_METADATA_TYPES =
*EnumSet.of(ResultMetadataType.ISSUE_NUMBER*,
ResultMetadataType.SUGGESTED_PRICE,
ResultMetadataType.ERROR_CORRECTION_LEVEL,
ResultMetadataType.POSSIBLE_COUNTRY);
Mil gracias de verdad :)
Ya lo he solucionado, he utilizado la solución 3 de aquí:
ResponderEliminarhttp://stackoverflow.com/questions/11959091/class-not-found-when-using-zxing
Your jar is not in the /libs folder. This happens when you have added the jar to the build path, but newer versions of ADT need it to be in /libs. Put it there and re-add it to the build path.
Ok, gracias por el link, lo añado a la entrada principal por si a alguien más le pasa.
EliminarSaludos, escribo para agradecer la moslestia de subir este tutorial, pero tengo que comentarte una duda. Cuando importo tu proyeto me aparece en su carpeta del arbol de proyectos una exclamacion el roja, y al incluir esta libreria en mi proyecto, tamben me aparece ese icono en mi proyecto. Necesito con urgencia solucionar este problema. Muchas gracias
ResponderEliminarEn el tutorial esta explicado, tienes que corregir el build-path, eligiendo el core.jar correcto que esta en la raíz del proyecto.
EliminarHola Jstryl_8, lo primero enhorabuena por tu tutorial, le he seguido paso a paso unas cuantas veces y no hay manera de q funcione. Uso zxing-2.0 y espero q este no sea el problema. No entiendo el uso del repositorio 2099 en vez de utilizar directamente la libreria de ZXing. Por supuesto soy nuevo en Android y mucho mas en el uso de la libreria ZXing.
ResponderEliminarMuchas gracias y espero tu respuesta
Usé el repositorio en su día (hace un año) porque no existía esa distribución de zXing en un .zip directamente, de todos modos usar el repositorio es prácticamente lo mismo, porque tienes el mismo código, pero obtenido de otra manera.
EliminarComo ya he comentado por arriba ahora no estoy con zXing, y desconozco si este tutorial funciona para las distribucion 2.0, 2.1 etc, porque como es normal van añadiendo cambios en el código que puede que hagan que se deba usar de forma distinta.
En un plazo corto-medio no tengo pensado ponerme otra vez con ello porque no dispongo de tiempo, así que no podré ayudarte, intenta usar las versión que menciono o a ver si alguien encuentra una manera de que la nueva funcione.
Muchas gracias Jstyl_8 por la rapida respuesta y explicaciones.
ResponderEliminarUn saludo
Hola buenos días, antes de nada excelente tutorial.
ResponderEliminarEstoy empezando con esto y aún tengo fallos estúpidos...
Mi problema es que al pulsar el botón me fuerza el cierre de la aplcación. En el código del botón sólo tengo esto:
Button b1 = (Button)findViewById(R.id.button1);
b1.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
//TextView tv = (TextView)findViewById(R.id.textView1);
//tv.setText("Pulso botón 1 alineación vertical");
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
});
Cual puede ser el problema??
Gracias
Buenas otra vez, creo que se cual puede ser el error. No había agregado el core.jar como libreria externa en mi proyecto. El problema que al hacerlo me dice esto:
ResponderEliminarCould not write file: C:\Users\Diego\Desktop\eclipse\workspace\NavegadorWeb\.classpath.
C:\Users\Diego\Desktop\eclipse\workspace\NavegadorWeb\.classpath (Acceso denegado)
¿qué puede ser?
Gracias
Vale...yo me lo guiso yo me lo como...
ResponderEliminarBorra si quieres mis dos anteriores post.
He rehecho todo y he conseguido que me saque un menu para elegir cual es el lector qr que quiero usar. Me sale el mio con dos nombres diferentes y no saca el que tengo instalado.
El problema que al darle a cualquiera de los dos la aplicación fuerza el cierre y no consigo ver por que. Te pego el log que genera:
11-19 17:00:57.687: E/AndroidRuntime(641): FATAL EXCEPTION: main
11-19 17:00:57.687: E/AndroidRuntime(641): java.lang.ExceptionInInitializerError
11-19 17:00:57.687: E/AndroidRuntime(641): at java.lang.Class.newInstanceImpl(Native Method)
11-19 17:00:57.687: E/AndroidRuntime(641): at java.lang.Class.newInstance(Class.java:1409)
11-19 17:00:57.687: E/AndroidRuntime(641): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
11-19 17:00:57.687: E/AndroidRuntime(641): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
11-19 17:00:57.687: E/AndroidRuntime(641): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
11-19 17:00:57.687: E/AndroidRuntime(641): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-19 17:00:57.687: E/AndroidRuntime(641): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
11-19 17:00:57.687: E/AndroidRuntime(641): at android.os.Handler.dispatchMessage(Handler.java:99)
11-19 17:00:57.687: E/AndroidRuntime(641): at android.os.Looper.loop(Looper.java:123)
11-19 17:00:57.687: E/AndroidRuntime(641): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-19 17:00:57.687: E/AndroidRuntime(641): at java.lang.reflect.Method.invokeNative(Native Method)
11-19 17:00:57.687: E/AndroidRuntime(641): at java.lang.reflect.Method.invoke(Method.java:507)
11-19 17:00:57.687: E/AndroidRuntime(641): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-19 17:00:57.687: E/AndroidRuntime(641): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-19 17:00:57.687: E/AndroidRuntime(641): at dalvik.system.NativeStart.main(Native Method)
11-19 17:00:57.687: E/AndroidRuntime(641): Caused by: java.lang.NoClassDefFoundError: com.google.zxing.ResultMetadataType
11-19 17:00:57.687: E/AndroidRuntime(641): at com.google.zxing.client.android.CaptureActivity.(CaptureActivity.java:104)
11-19 17:00:57.687: E/AndroidRuntime(641): ... 15 more
Muchas gracias y mil disculpas por ser tan pesado :S
También me da estos warning que supongo que necesitaras saberlo:
Eliminar11-19 17:00:57.407: W/dalvikvm(641): VFY: unable to resolve static field 969 (ISSUE_NUMBER) in Lcom/google/zxing/ResultMetadataType;
11-19 17:00:57.417: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/ResultPoint;)
11-19 17:00:57.417: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/ResultPoint;)
11-19 17:00:57.417: W/dalvikvm(641): VFY: unable to resolve virtual method 3221: Lcom/google/zxing/ResultPoint;.getX ()F
11-19 17:00:57.447: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.447: W/dalvikvm(641): VFY: unable to resolve virtual method 3217: Lcom/google/zxing/Result;.getResultPoints ()[Lcom/google/zxing/ResultPoint;
11-19 17:00:57.458: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.477: W/dalvikvm(641): VFY: unable to resolve virtual method 3220: Lcom/google/zxing/Result;.toString ()Ljava/lang/String;
11-19 17:00:57.497: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.517: W/dalvikvm(641): VFY: unable to resolve virtual method 3214: Lcom/google/zxing/Result;.getBarcodeFormat ()Lcom/google/zxing/BarcodeFormat;
11-19 17:00:57.547: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.567: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.567: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.577: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.577: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.587: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.607: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.607: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.617: W/dalvikvm(641): VFY: unable to find class referenced in signature (Lcom/google/zxing/Result;)
11-19 17:00:57.647: W/dalvikvm(641): Exception Ljava/lang/NoClassDefFoundError; thrown while initializing Lcom/google/zxing/client/android/CaptureActivity;
11-19 17:00:57.647: W/dalvikvm(641): Class init failed in newInstance call (Lcom/google/zxing/client/android/CaptureActivity;)
11-19 17:00:57.657: W/dalvikvm(641): threadid=1: thread exiting with uncaught exception (group=0x40015560)
Creo que el problema sigue siendo algo del core.jar con respecto a la libreria de zXing por esto:
Eliminar11-19 17:00:57.687: E/AndroidRuntime(641): Caused by: java.lang.NoClassDefFoundError: com.google.zxing.ResultMetadataType
Algún tipo de incompatibilidad entre ellos pienso que puede ser.
Aparte no entiendo lo del menú con los dos tipos de lectores?¿ Que quieres decir con eso? Que has hecho una aplicación que lanza otras 2?
No sé, te aconsejaría que probaras que funcionara una simple, y luego ir añadiéndole más funcionalidades sobre una base que ya tengas.
Perdon por tardar tanto pero he estado de viaje jeje. El menu me sale solo siguiendo los pasos de tu explicacion. Y en cuanto al error del core...estoy utilizando el tuyo asi que no se porque puede ser si el tuyo no tenia ningun erros :S
EliminarHola, queria pedirte un favor.
ResponderEliminarcomo puedo hacer que se encienda el led de la camara cuando lanzo el intent de zxing para leer codigos de barras. gracias
Ni idea, supongo que existe una parte de la API para controlar el flash y demás, revísala y lo mismo encuentras algo que puedas usar.
EliminarHola jstyl8.
ResponderEliminarPrimero darte las más sinceras gracias por este tutorial que me ha venido genial para el proyecto que estoy realizando.
Pero por más que pruebo no consigo hacerlo funcionar. Ni con tu proyecto ni haciendolo todo desde 0.
Me va perfecto hasta que pulso el boton, salen las opciones de escaneado y al pulsar se peta. Al realizar las mejoras igual, peta siempre.
Me da siempre el mismo error: FATAL EXCEPTION : main
java.lang.exceptionInInitializeError.
Por favor si eres tan amable de ayudarme te lo agradecería.
Gracias.
Este comentario ha sido eliminado por el autor.
ResponderEliminarAcabo de leer 3 post mas arriba que Diego tiene exactamente el mismo error que yo.
ResponderEliminarEl core.jar lo he agregado externamente de tu proyecto, tanto en la aplicación como en la libreria de Zxing.
Puede ser que no funcione con la libreria 2.1 de Zxing? Podrías hacer el favor de problarlo. No soy nuevo en Android y la verdad que me estoy volviendo loco con esto.
Mil gracias.
He probado de nuevo (solo en emulador porque no tengo teléfono Android ahora disponible) pero usando el proyecto que pongo y los pasos de poner core, manifest, etc, me funciona, se abre la cámara sin errores, aunque no puedo asegurar que capturando funcione pero casi seguro.
EliminarComo digo por arriba desconozco si funciona para versiones posteriores a la revisión 2099 del proyecto de zxing, van ya por la 2560 así que imagina xD, ahora mismo no dispongo de tiempo para empezar a probarlo con las nuevas versiones, cuando lo tenga lo miraré a ver si este sistema ya no va y hay que buscar otra forma.
De todos modos si estas mezclando archivos de lo mio con versiones actuales seguramente pete por incompatibilidad.
Un saludo
Muchas gracias por la respuesta Jstyl seguiré intentandolo.
ResponderEliminarSe agradece profundamente que gente como tu ayude así a los demás.
Saludos.
Buenos días, he visto que tienes el mismo problema que yo. Si consiguieras solucionarlo me sería de gran ayuda que me dijeras como lo has hecho. Te dejo mi correo (raistlin818@hotmail.com)
EliminarGracias y suerte.
Eres grande! Me sirvió y mucho tu tutorial, en el simulador ya me funciona ahora solo me queda meterlo al móvil y probar.
ResponderEliminarMuchísimas gracias por tu solidaridad!
Gracias a ti, siempre he creído que se aprende más compartiendo lo que se sabe :D
EliminarHola Jstyl.
ResponderEliminarYa conseguí hacerlo funcionar!! Gracias por todo!
No se si sabrás o alguna página que lo tenga como incrustar en la misma activiy el botón que lanza el intent y un cuadro para que se vea el scanner, es decir que no te habra una nueva activity para leer el código, si no que utlilize un fragmento de la activity inicial para escanearlo.
Muchisimas gracias
Ni idea, para eso habría que meterse supongo en el layout de la cámara de zXing y sería más complicado.
EliminarQuizás modificando el menú emergente ( el que en este tutorial se explica como esconder) se podría hacer algo por ahí.
un saludo
Amigo,,,, Comienzo con tu tutorial finalizando comenzando el 2013 !!
ResponderEliminarTe estaré contando como me va. Necesito que mi app escanee QR sin depender de otras apps.
Gracias por tu ayuda.
Slds,
Podrias subir el archivo otra vez por favor? En esta pagina ya no esta disponible: http://www.hidelinks.com/?ghvw4k7r2q
ResponderEliminarMuchas gracias
He añadido a la entrada otro link que sí funciona.
EliminarUn saludo.
Increible. Gracias por el tuto. Curraísimo!!
ResponderEliminarUn saludo.
No se que puede ser pero me falla la aplicacion cuando la abro la primera vez con un intent desde otra app.. Solo falla la primera vez despues de instalacion! pero el mobil peta.. Solo es la primera vez, luego funciona de maravilla!
ResponderEliminarEse problema también lo tenía otro que se pasó por aquí.
EliminarTe digo lo mismo que le dije al otro, no sé a que puede ser debido, prueba a revisar el logcat a ver que te pone.
creo que el problema esta al intentar abrir la camara desde otra app... hay que inicializarla o algo! gracias x todo
ResponderEliminarHola, muchas gracias por el tutorial, Jstyl_8, me ha servido de mucho, de lo mejor que he visto sobre ZXing y muy currado.
ResponderEliminarTengo un problema, que he leído que ya ha tenido alguién más pero no he sabido resolver.
Llamo correctamente al scanner y scaneo en mi caso un barcode 1D . El problema es que se me queda la pantalla en la que te muestra los botones: Búsqueda Web, Compartir por correo electrónico y Compartir por SMS. Obtengo ResultCode = 0 y no me guarda el barcode leído por lo que pierdo la información. He leído por arriba que al leer el código regresa instantaneamente al anterior Activity, cosa que a mi no me sucede...
Otra duda, hay alguna forma de en esta pantalla introducir mis propios botones??
Gracias por atenderme.
Un saludo!
Al ser otro tipo de código y no un QR quizás el comportamiento es distinto, pero lo que yo he probado siempre al escanear el código vuelve al activity que lo llamó, así es el comportamiento del startActivityForResult().
EliminarPrueba a revisar el código del CaptureActivity del zxing a ver si es que lanza otra actividad antes de volver a la inicial, aunque que yo recuerde no lo hacía.
Modificar el layout de la aplicación de la cámara es complicao por lo que sé, pero sí se puede, aunque yo recomiendo dejar eso quieto y añadir lo que sea en las que tu hagas a partir de la información que te devuelve el zxing.
Ya lo he solucionado. El problema era que ponía en el Manifest la carpeta de SCAN de mi aplicación en vez de la del proyecto ZXing original y nunca entraba en el Handler de CaptureActivity.
EliminarGracias por todo, tienes un nuevo seguidor del blog!!
jajaj
Estoy empezando a realizar una aplicación y ésto me ha venido de perlas. Gracias por este gran aporte compañero.
ResponderEliminarxplicando.blogspot.com
excelente tutorial. necesito hacer una aplicacion que me ejecute el barcode scanner y el resultado del qr code me lo mande a el edit text de otra activity. como seria?desde ya muy agradecido!!!
ResponderEliminarEn el tutorial tienes como hacer que una activity llame al lector y el resultado vaya a esa misma que lo ha llamado.
EliminarSi quieres que vaya a otra cuando tengas el resultado en la Activity inicial lanza otra con esa información del qr code y listo.
Hola, estoy viendo esta libreria, y me esta tirando un error peculiar.
ResponderEliminarjava.lang.RuntimeException: Unable to resume activity {com.argeniss.zxingdemov2/com.google.zxing.client.android.CaptureActivity}: java.lang.NullPointerException
Creo haber seguido correctamente el tutorial y la verdad no ecnuentro el problema. SI a alguien le paso lo mismo y me quiere dar una mano, estaría buenísimo.
Saludos