Spanish Imprimir por bluetooth ¿algo que funcione bien?

vecino

Well-Known Member
Licensed User
Longtime 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
Longtime 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.
 

josejad

Expert
Licensed User
Longtime 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
Longtime 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
Longtime 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

  • BtSerial.zip
    134.5 KB · Views: 341
Last edited:

vecino

Well-Known Member
Licensed User
Longtime User
Gracias, amigos, estoy haciendo pruebas.
Después comento resultados.
 

vecino

Well-Known Member
Licensed User
Longtime 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
Longtime 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
Longtime 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
Longtime 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
Longtime 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
Longtime 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.
 

vecino

Well-Known Member
Licensed User
Longtime User
Hola, f0raster0, aquí va una foto del adaptador que utilizo.
Ese adaptador con esa impresora, se utiliza en montones de programas para windows, y funciona perfectamente.

No he comentado que utilice "serial", ni ninguna otra cosa, porque no he usado nada todavía, sino que he estado probando todos los códigos que he encontrado por estos foros. Con todos he tenido problemas.

Finalmente parece que el problema es la versión de android de mi tablet de prueba. He podido hacer pruebas con otras tablets y smartphones que tienen versiones distintas de android y han funcionado todas bien con todos los códigos que he probado.

No sé si te refieres a eso.
Saludos.

856cfc75563016117ddbaa3e733e6131o.png
 

vecino

Well-Known Member
Licensed User
Longtime User
quizas focalizar en el (secreto) adaptador que usas con tu Star DP8340S
https://www.b4x.com/android/forum/threads/sd-bluetooth-printer.85750/page-7#post-647296
Edit: al menos ahora escribes que usas serial ahahah
links:
https://www.b4x.com/android/forum/t...ts-en-bluetooth-star-dp8340s-matricial.94707/
Sí, la primera vez que me puse con esto fue el verano del año pasado (y ya ni me acordaba, parece que ahí descubrí que el problema era la tablet o_O ) y tuve que dejarlo porque me encargaron otras cosas que tenían más prioridad.
Ahora me lo han vuelto a solicitar (imprimir en esas viejas impresoras) y me puse de nuevo con ello, olvidando que ya lo había hecho el año pasado, pero como no me puedo explicar bien en inglés (utilizo el google translator) decidí crear un hilo en esta sección en español.

Y lo peor de todo es que ahora me han pedido nuevamente que deje esto aparcado para cuando tenga tiempo libre y que vuelva con otras cosas más importantes :mad:
Saludos.
 

Gustsp

Member
Licensed User
Primero de todo, muchísimas gracias :)
Y después, ¿alguna solución a ese problema con la versión de android?
Saludos.

Hola, Lo que opte es avisar a los clientes que se astengan de adquirir tablet con Android 4.2:D
Tambien, en el afan de encontrar una solución, use conectar al bluetooth por Connect3. Aveces lograba que funcione correctamente.

B4X:
 If Serial1.IsEnabled =False Then
       Serial1.Initialize("Serial1")
  End If
  Log (Serial1.IsEnabled)
              
  If RadioButton1.Checked=True Then
      BtPuerto=1 'usualmente es 1
      Serial1.Connect3(ImpresionBtUUID,BtPuerto)
  Else
      Serial1.Connect(ImpresionBtUUID))
  End If
  Log (Serial1.IsEnabled)


https://issuetracker.google.com/issues/36911410
 
Top