Spanish [Solucionado] Bluetooth perdido por alejamiento del dispositivo a la impresora

vecino

Well-Known Member
Licensed User
Longtime User
Hola, amigos, de nuevo por aquí con un problemita.
Os explico, se trata de un programa de ventas que imprime por bluetooth, lo llevan los vendedores de reparto de mercancía y tienen que tomar nota de los pedidos y luego acercarse al camión para poder imprimir, allí está la impresora.

Todo funciona bien salvo cuando ocurren 2 casos.

A veces imprimen y otras veces están muy lejos del alcance del bluetooth y no pueden imprimir, vuelven al camión (a la impresora) y reintentan imprimir.
Otras veces es que apagan la impresora y no conecta, obviamente, hasta que se dan cuenta que está apagada.
Otras veces es una mezcla de ambas cosas, que están demasiado lejos de la impresora, está apagada, se acercan y la encienden, se van y no tiene alcance el bluetooth, se acerca e intentan imprimir entonces, se dan cuenta que está apagada, que antes no imprimía porque estaba lejos, no porque estuviese apagada.
En fin, que entre una cosa y otra me tienen un poco desesperado.

Ahora voy a la pregunta, ¿cómo gestiono el problema para controlar que haya alcance del bluetooth a la impresora y que esta esté encendida?
Que avise con los mensajes oportunos para cada caso y que no tenga que salir del programa, no muestre errores, etc.
Gracias por vuestra ayuda.
 

edgar_ortiz

Active Member
Licensed User
Longtime User
Pregunta: Cuando tratas de imprimir y "por alguna razón" falla, te muestra un mensaje de error?
- De ser así, entonces puedes llevar el control utilizando Try - Catch

Saludos,

Edgar
 

TILogistic

Expert
Licensed User
Longtime User
Estos son un problema común en las conexiones Bluetooth, que se pueden controlar.

Nota: Te falto un tercero es cuando el usuario desactiva el Bluetooth.

Bueno no se cual es tu lógica de tu APP, pero tenga 2 cosas presente, la cual comente en el Post anterior, hay que separar rutinas en conexión e impresión.

1. La Conexión de la impresora
2. La Impresion en la impresora

Su problema esta en la primera, las solución esta en la biblioteca serial que ya usa, que puede verificar antes de imprimir lo siguiente.

1.- Si esta Bluetooth esta encendido.
2.- Si esta emparejado
3.- Si esta conectado.

Revise el manual:

ejemplo:
sess

Secciones BluetoothAdmin y Serial y se dará cuenta que debe hacer con los 3 puntos antes mencionados.

Ejemplo:
Secciones BluetoothAdmin

Method_636.png
IsEnabled como booleano

Comprueba si el adaptador Bluetooth está habilitado.

Saludos.
 
Last edited:

vecino

Well-Known Member
Licensed User
Longtime User
Hola, amigos, no consigo controlar el descontrol de BT conectado/no conectado, impresora conectada/no conectada, dispositivo demasiado alejado con/sin alcance.
He creado una demo reducida del código que estoy empleando, por si podéis echarle un vistazo.
Aquí lo adjunto, gracias.
 

Attachments

  • test-bt.zip
    10 KB · Views: 180

TILogistic

Expert
Licensed User
Longtime User
he revisado tu app. y veo que utilizas la misma lógica que en los demos que sean posteado en el foro.

1. BluetoothAdmin controla el estado del Bluetooth
2. Serial se conecta a la MAC del dispositivo que se selecciono del Bluetooth.

Primero hacer lo siguiente:
selecciona la impresora y guarda Nombre de Impresora y MAC para usarla siempre que deseas imprimir o selecciones otra impresora.

Con los datos guardados de la impresora, solo necesitas comprobar lo siguiente.

1.Si esta activo el Bluetooth, en caso contrario activar.
2.Si esta activo el Bluetooth conectar a la impresora con los datos guardados (MAC).

Nota:
Cada vez que envías a imprimir, conecta y desconecta la impresora, así puedes verificas el estado de la impresora cada vez que envías a imprimir .

Espero que se entienda el proceso.

Saludos,
 
Last edited:

vecino

Well-Known Member
Licensed User
Longtime User
Hola, oparra, realmente sí guardo la información de la impresora, pero para esta demo lo he reducido y he omitido esa parte.
Según tu comentario:
1.Si esta activo el Bluetooth, en caso contrario activar.
Supongo que te refieres a: BTadmin.Enable
B4X:
if not(BTadmin.Enable) then BTadmin.Enable
2.Si esta activo el Bluetooth conectar a la impresora con los datos guardados (MAC).
Ok, leo los datos almacenados en la base de datos de impresora y mac y conecto a ella.
Nota: Cada vez que envías a imprimir, conecta y desconecta la impresora, así puedes verificas el estado de la impresora cada vez que envías a imprimir .
¿Eso no es esta parte del código?
B4X:
If Not(twOut.IsInitialized) Then
  OutStream = BTconexSerial.OutputStream
  twOut.Initialize2(OutStream,"windows-1252") '''    twOut.Initialize2(BTconexSerial.OutputStream,"windows-1252")
End If
 

TILogistic

Expert
Licensed User
Longtime User
No probado:

Este código podría ser un SUB que devolviera un mensaje u otra cosa en vez de Return

B4X:
            Try
                If Not(BluetoothAdmin1.IsEnabled) Then Return
               
                If Not(BluetoothAdmin1.Enable) Then Return
               
                Wait For BluetoothAdmin1_StateChanged (NewState As Int, OldState As Int)
                If NewState = BluetoothAdmin1.STATE_OFF Or NewState = BluetoothAdmin1.STATE_TURNING_OFF Then Return
               
                Serial1.Connect(PrinterMAC)
               
                Wait For Serial1_Connected (Success As Boolean)
                If Not(Success) Then Return
               
                Dim OutStream As OutputStream = Serial1.OutputStream
                Dim Printer As TextWriter
               
                Printer.Initialize2(OutStream, "windows-1252")
                Printer.WriteList( llineas )
                Printer.Flush
                Printer.Close

                OutStream.Close
                Serial1.Disconnect
            Catch
                Log(LastException)
            End Try
 
Last edited:

vecino

Well-Known Member
Licensed User
Longtime User
Bueno, he estado haciendo pruebas con tus indicaciones y parece que funciona con el código que he adjuntado.

Lo que no tengo muy claro es si es correcto la inicialización de BTconexSerial cada vez que se va a imprimir.

B4X:
BTconexSerial.Initialize("BTconexSerial")   ' <--- ?
BTconexSerial.Connect(cPrinterBTmac)
Wait For BTconexSerial_Connected(success As Boolean)
If success Then
  OutStream = BTconexSerial.OutputStream
  twOut.Initialize2(OutStream,"windows-1252") '''    twOut.Initialize2(BTconexSerial.OutputStream,"windows-1252")

  twOut.WriteList( llineas )
  twOut.Flush
  twOut.Close

  OutStream.Close
  BTconexSerial.Disconnect

End If
 

Attachments

  • test-bt.zip
    10.1 KB · Views: 166

TILogistic

Expert
Licensed User
Longtime User
Lo que no tengo muy claro es si es correcto la inicialización de BTconexSerial cada vez que se va a imprimir.

en código uso:

BTconexSerial.Disconnect

Method_636.png
Disconnect

Disconnects the connection (if such exists) and stops listening for new connections.

Entonces debe hacer lo siguiente:

ver:
Method_636.png
Initialize (EventName As String)

Initialized the object. You may want to call IsEnabled before trying to work with the object.

Method_636.png
Connect (MacAddress As String)

Tries to connect to a device with the given address. The connection is done in the background.
The Connected event will be raised when the connection is ready (or fails).
The UUID used for the connection is the default UUID: 00001101-0000-1000-8000-00805F9B34FB.

Verificar antes de inicializar y conectar

Verificar Bluetooth
Method_636.png
IsEnabled As Boolean

Tests whether the Bluetooth is enabled.

Verificar si esta inicializado serial
Method_636.png
IsInitialized As Boolean
 
Last edited:

TILogistic

Expert
Licensed User
Longtime User
Yo tome este ejemplo y modifique la clase BluetoothManager para mis proyectos de impresión.

 

vecino

Well-Known Member
Licensed User
Longtime User
Gracias, amigo, a ver si consigo un sistema robusto que controle todas las posibilidades.
Voy a ver esa información que has enlazado.
 

vecino

Well-Known Member
Licensed User
Longtime User
Sigo trabajando en esto, haciendo pruebas y enviándosela al cliente, parece que de momento va bien, lo dejaré usar varios días más, a ver si es capaz de romperlo :D
 

vecino

Well-Known Member
Licensed User
Longtime User
Hola, amigos, tras las pruebas que han hecho los clientes, se puede dar por solucionado este tema, el sistema detecta si no está habilitado el bluetooth y lo activa, conecta a la impresora, avisa si está apagada y pregunta si quiere encenderla y reintentar la impresión, controla si está demasiado lejos y no hay cobertura bluetooth y también pregunta si quiere reintentar la impresión, etc. O sea, que ahora no se escapan por ningún sitio, está todo controlado y no hay quejas.
¡¡¡Muchísimas gracias!!!
Saludos.
 
Top