Hola, amigos.
Intento imprimir recibos desde un smartfone a una impresora inalámbrica por BlueTooth.
Estuve indagando en el foro y en internet varios días y no encontré una solución satisfactoria.
Uso Delphi10 Seattle.
Encontré un ejemplo en la dirección C:\RadStudio10\17.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\Classic Bluetooth Basic app.
Comencé a hacer pruebas con con este proyecto de ejemplo de Embarcadero y he llegado a la conclusión de que tiene un problema al crear el socket para la conexión.
El error que da la aplicación compilada y SIN MODIFICACIÓN DE CÓDIGO es el siguiente:
java.io.IOException: read failed, socket might closed or time out, read ret:-1
He intentado localizar el error con el siguiente código:
Código Delphi
[-]
procedure TForm1.SendData;
var
ToSend: TBytes;
LDevice: TBluetoothDevice;
begin
if (FSocket = nil) or (ItemIndex <> ComboboxPaired.ItemIndex) then
begin
ShowMessage('Socket = Nil o bien el índice ha cambiado'); if ComboboxPaired.ItemIndex > -1 then
begin
LDevice := FPairedDevices[ComboboxPaired.ItemIndex] as TBluetoothDevice;
DisplayR.Lines.Add(GetServiceName(ServiceGUI));
DisplayR.GoToTextEnd;
FSocket := LDevice.CreateClientSocket(StringToGUID(ServiceGUI), False);
if FSocket <> nil then
begin
ShowMessage('Socket no es Nil'); ItemIndex := ComboboxPaired.ItemIndex;
FSocket.Connect; if not (FSocket.Connected) then ShowMessage('Socket NO CONECTADO'); if (FSocket.Connected) then ShowMessage('Socket HE CONECTADO'); ToSend := TEncoding.UTF8.GetBytes(Edit1.Text);
FSocket.SendData(ToSend);
DisplayR.Lines.Add('Text Sent');
DisplayR.GoToTextEnd;
end
else
ShowMessage('Out of time -15s-');
end
else
ShowMessage('No paired device selected');
end
else
begin
ShowMessage('Socket <> Nil o bien el índice NO ha cambiado'); ToSend := TEncoding.UTF8.GetBytes(Edit1.Text);
FSocket.SendData(ToSend);
DisplayR.Lines.Add('Text Sent');
DisplayR.GoToTextEnd;
end;
end;
El código es el original de Embarcadero, yo solamente he añadido los mensajes para descubrir el punto del error.
El resultado ha sido:
Dos mensajes.
El primero: "Socket = Nil o bien el índice ha cambiado".
El segundo: "Socket no es Nil".
El Tercer mensaje, sería si ha conectado o no.
PUES EL ERROR SALTA ANTES DE EMITIR EL tercer mensaje: éste no aparece.
Lo más "gracioso" es que detecta la impresora y al pulsar el "ComboBoDevices" aparece en la lista detectada y lo puedes seleccionar. Y LA SELECCIONA.
Pero cuando cambias al tab "SERVICE DEMO" y pulsas el boton "Send Texto-> Thermal Printer"
entonces aparecen los dos mensajes mencionados y a continuación el mensaje de error en el Memo1.
No se si el problema está en que no crea un GUID adecuado para la impresora, o si le asignas una impresora bluetooth el socket NO SE CREA.
NO LE ENVIO UN CÓDIGO DE ESCAPE A LA IMPRESORA, PORQUE LA APP, HE COMPROBADO QUE NO LLEGA HASTA AHÍ.
Espero una respuesta al problema, y si no la recibo, tendré que cancelar el proyecto. Pues todo él se basa en la posibilidad de imprimir BlueTooth.
Un gran saludo para todos y especialmente a los que han conseguido leer hasta aquí.
Mis disculpas por el ROLLAZO. Pero como dice Neftalí "
Más tiempo dedicado a la pregunta=Mejores respuestas."
Gracias por anticipado a los que puedan ayudarme.
Saludos para todos. Gracias por mantener este foro de consulta durante tantos años.