Spanish Imprimir por bluetooth ¿algo que funcione bien?

vecino

Well-Known Member
Licensed User
Hola, amigos, llevo tiempo por aquí aunque no recuerdo haber participado en la sección en español.

Tengo un problema que no sé si os habéis encontrado alguno de vosotros. Necesito imprimir el típico ticket o factura en una impresora bluetooth.

He buscado y rebuscado todos los hilos donde se hable de imprimir y/o bluetooth, he probado todos los ejemplos que he encontrado, he hecho pruebas a montones, y sin embargo, no encuentro nada fiable y funcional.
Con todos los casos me encuentro problemas diversos, unos imprimen y deja bloqueado el programa. Otros imprimen una línea y varios segundos después imprime la siguiente línea. Otros repiten líneas. Con otros directamente ni funciona.

He de decir que utilizo B4A desde hace 7 años, que he hecho varios proyectos donde se imprime por puerto serie, usb, paralelo, por red, wifi, etc. y están todos funcionando en muchos negocios, pero ahora que necesito usar una impresión por bluetooth me está resultando imposible.

Pero, ya digo, no es que los ejemplos que he visto/probado no funcionen, porque funcionan, el problema es que simplemente no funciona estable, ágil, "normal", como debe funcionar una impresión.

Mi pregunta: ¿tenéis alguno código que funcione BIEN para imprimir por bluetooh? ¿lo podéis compartir? ¿lo estáis vendiendo?
Pues eso es todo, muchas gracias, saludos.
 

vecino

Well-Known Member
Licensed User
Hola vecino...
Hola, y gracias por tu respuesta.
Sí he intentado usar lo que has indicado, pero al igual que le ha ocurrido al otro usuario que le ha contestado, no se puede probar porque sale un mensaje de que es una demo.
Además, entre la versión demo y la "buena" también cambia el comando que envía los datos a la impresora, así que no es posible probar la versión "buena" hasta que la pagues.
El caso es que ya tengo la versión anterior que no tenía ninguna protección y tampoco funcionaba bien. Así que por desgracia, esa parece que tampoco sirve.
 

José J. Aguilar

Well-Known Member
Licensed User
Sí, fíjate que hoy está habiendo movimiento en esos hilos... se han puesto de acuerdo para echarte una mano ;-)
 

vecino

Well-Known Member
Licensed User
Hola, f0raster0, ese código ya lo he probado y tampoco consigo que funcione. A ver si va a ser la impresora, porque ya me extraña también que no funcione con nada que he encontrado por los foros.
Es una vieja impresora Star DP8340S, matricial, con un convertidor de puerto serie 25 a bluetooth.
Ya llevo muchos días con esto y nunca funciona bien, así que empiezo a sospechar de la impresora.
 

vecino

Well-Known Member
Licensed User
No, no funcionó, pensé que era la tablet, pero luego fui a probarlo de nuevo y siguieron los problemas con la impresora (es la misma).

Me surgieron otras cosas y lo abandoné, hasta ahora, que he tenido que retomar el asunto.
 

Gustsp

Member
Licensed User
Screenshot (2).png
Hola, @vecino, Le adjunto un ejemplo de impresion bluetooth.
Recorda que tenes que emparejar primero la impresora con la tablet.
Importante: El codigo NO funciona en modo debug.

Particularidades:
  • *detecta si esta activado el bluetooth. sino pide para activarlo.
  • *Seleccionar la impresora del listado de dispositivos bluetooth emparejados.
  • *testeo de conexión.
  • *prueba de impresión.
Incluye el apk para una prueba rapida...

Saludos


Comenta aca si funcionó o si tuviste problemas. ¡Enriquese el foro!
 

Attachments

Last edited:

vecino

Well-Known Member
Licensed User
Hola, amigos, por aquí de nuevo, os cuento:

Lo primero que hice fue ver la versión de android de la tablet y es justo la 4.2
Probé tu código y resultó el mismo problema habitual con otras pruebas, que imprimir, imprime, pero puede suceder dos cosas, que se quede "bloqueda" durante unos 20 segundos y luego se "desbloquea" y se puede volver a imprimir otra línea. Se bloqueará otros 20 segundos (aproximado, no lo he cronometrado) y así sucesivamente.
En otras ocasiones siempre muestra el siguiente error:
B4X:
main_imprimirtest (java line: 553)
java.io.IOException: [JSR82] write: write() failed.
   at android.bluetooth.BluetoothSocket.write(BluetoothSocket.java:702)
   at android.bluetooth.BluetoothOutputStream.write(BluetoothOutputStream.java:85)
   at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:167)
   at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:158)
   at java.io.BufferedWriter.flush(BufferedWriter.java:124)
   at anywheresoftware.b4a.objects.streams.File$TextWriterWrapper.Flush(File.java:602)
Pero lo hace tras imprimir, justo después en el "flush".
Luego hice pruebas en otros dispositivos con versiones distintas de android y en todos funcionó bien :)
Así que, resumiendo, parece que el problema era la tablet que estaba usando.

Todavía no he podido implementar tu código en mi software porque me han encargado otra cosa con más prioridad y he tenido que postergarlo para más adelante.
Espero que funcione bien, casi seguro que no habrá problema, espero contarlo por aquí.

De nuevo, ¡¡¡MUCHÍSIMAS GRACIAS!!!
Saludos.
 
Last edited:

vecino

Well-Known Member
Licensed User
Otro dato... Si tienes android 4.2 suele ser problematico con el bluetooth:confused:
Primero de todo, muchísimas gracias :)
Y después, ¿alguna solución a ese problema con la versión de android?
Saludos.
 

bgsoft

Well-Known Member
Licensed User
Hola vecino:

java.io.IOException: [JSR82] write: write() failed.
Este problema suele ocurrir cuando no hay conexión con la impresora y haces el Flush, tendrias antes de hacer el Flush crear unas variables que te digan que está inicializada correctamente y emparejada, si no se cumplen esas dos condiciones no permitir hacer el Flush .

Y ademas para evitar el error ponerle un Try


B4X:
Sub Imprimir

' aqui el codigo tuyo
'''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''

If ImpresoraInicilizada = False Then
        If MacAddress.Length = 0 Then
           IniciarImpresora
        Else
           PuertoSerie.Connect(MacAddress)   
        End If
  End If


if ImpresoraInicilizada = false or ImpresoraEmparejada = false then return


Try
      Printer.Flush   
      ImpresoraInicilizada = True
Catch
        ImpresoraInicilizada = False
        LogColor("IMPRESORA Error al enviar",Colors.RED)
End Try
En Sub

Sub Printer_Connected (Success As Boolean)
       ' Entra aqui cuando se hace un Connect (PuertoSerie.Connect(MacAddress) )
        
       If Success Then
           ImpresoraEmparejada = True
           ImpresoraInicilizadaOK = True
        Else
           ImpresoraEmparejada = false
           ImpresoraInicilizadaOK = false
         End if
End sub

Te he puesto unas variables para que te hagas una pequeña idea de como gestionarla, no se si ya lo haces. Tambien las puedes emplear para saber si mandó los datos a imprimir y no dió error de cara a informar al usuario que ponga en marcha la impresora.

Saludos
 

vecino

Well-Known Member
Licensed User
Hola, Jesús, ese es el problema, que está conectada y emparejada, e incluso ¡¡¡imprime!!!. Pero justo tras imprimir se queda congelado el sistema unos 20 segundos, sale el mensaje de error que he puesto antes y ¡¡¡puedes seguir escribiendo otra línea!!!, y así con cada una de ellas.
Si pongo el "try catch" ocurre exactamente lo mismo, salvo que no sale el mensaje de error al usuario, pero igualmente se queda congelado exactamente igual como he comentado antes.
Esto es si la tablet/smartphone tiene android 4.2, porque con otras versiones funciona bien.
El caso es que he probado muchos programas de la "google store" y me he encontrado con que casi todos fallan igualmente, salvo un par de ellos que funcionan bien. Así que supongo que habrá que tener en cuenta algo para esa versión, supongo, pero no lo sé, ojalá lo supiera.
Saludos.
 

bgsoft

Well-Known Member
Licensed User
Hola vecino, una pregunta aunque sea tonta, no estaras empleando la libreria de bluetooth BLE, ya que esta es a partir de Android 4.3

Saludos
 

vecino

Well-Known Member
Licensed User
Hola vecino, una pregunta aunque sea tonta, no estaras empleando la libreria de bluetooth BLE, ya que esta es a partir de Android 4.3
Saludos
Hola, estoy usando "Serial".
He visto BLE2 en la lista de las disponibles, pero no sé para qué sirve.
 

f0raster0

Well-Known Member
Licensed User
Last edited:
Top