Ir al contenido


Foto

Manejo de Bluetooth


  • Por favor identifícate para responder
3 respuestas en este tema

#1 MANUEL ESPLA

MANUEL ESPLA

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 22 enero 2021 - 02:49

Hola 

 

En Delphi, tengo claro como 

 

Buscar dispositivos, emparejarlos, ver los emparejados y desemparejarlos.

También es sencillo, conectar con una impresora Bluetooth y por socket mandarle cosas a imprimir.

 

Pero no encuentro nada sobre lo siguiente:

 

Tengo varios altavoces Bluetooth y cada uno me aparece como emparejado. Pero quiero 'conectarme' con uno de ellos y desconectarme de otro.

En Windows está claro que ves los emparejados, le das al botón de conectar y te conecta. Pero necesito hacerlo desde Delphi. Alguien sabe cómo?

 

Gracias 


  • 0

#2 MANUEL ESPLA

MANUEL ESPLA

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 24 enero 2021 - 11:42

Hola,

Tal vez me expliqué mal

Una cosa es ver los dispositivos emparejados y otra los conectados.

Centrándonos en los altavoces. Tengo tres dispositivos emparejados

ALTAVOZ1
Emparejado

ALTAVOZ2
Emparejado

ALTAVOZ3
Música Conectada

y el sonido se escucha por el ALTAVOZ3

Quiero poder desde Delphi, cambiar y que en vez de ser ALTAVOZ3 el que tenga 'Música conectada' sea ALTAVOZ2 por ejemplo.
Yo puedo cargar en un TMEMO los dispositivos Emparejados y me saldrá
ALTAVOZ1
ALTAVOZ2
ALTAVOZ3

Pero quiero saber cual de los tres está en modo 'Musica Conectada' y cómo puedo cambiarlo.

Gracias


  • 0

#3 MANUEL ESPLA

MANUEL ESPLA

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 08 febrero 2021 - 07:23

En esta dirección

 

https://itectec.com/...uetooth-device/

 

está la solución en el programa btcom.exe.

 

El tratamiento más o menos es:


delphi
  1. Uses System.Bluetooth, ShellApi, Winapi.Messages, AdvPanel;
  2. //------------------------------------------------------------------------------
  3. // ************** Procedimiento que Escanea Dispositivos Bluetooth *************
  4. //------------------------------------------------------------------------------
  5. procedure TForm1.DiscoveryD;
  6. Var i: Integer;
  7. begin
  8. FBluetoothManager := TBluetoothManager.Current;
  9. FAdapter := FBluetoothManager.CurrentAdapter;
  10. if FBluetoothManager.ConnectionState = TBluetoothConnectionState.Connected then Begin
  11. FPairedDevices := FBluetoothManager.GetPairedDevices;
  12. end;
  13. end;
  14. //------------------------------------------------------------------------------
  15. // ************** Gestion de la selección de elementos *************************
  16. //------------------------------------------------------------------------------
  17. procedure TForm1.b01click(Sender: TObject);
  18. Var i, n, w: Integer; iUID: String;
  19. begin
  20. If BotonAltavoz.Down Then Begin
  21. i := (Sender as TAdvPanel).Tag;
  22. if FBluetoothManager.ConnectionState = TBluetoothConnectionState.Connected then Begin
  23. iUID:= FPairedDevices[i].Address;
  24. n:= 0;
  25. if (Sender As TAdvPanel).ColorTo = BotonCogido then Begin // BotonCogido esta en verde que significa que está activo
  26. EjecutaExterno(iUID, '110B', '-r'); // Desactivo los servicios
  27. EjecutaExterno(iUID, '110E', '-r');
  28. DiscoveryD; // Al parar los servicios, debo volver a leer los dispositivos emparejados, ya que cambia el orden
  29. w:= Damei(iUID);
  30. while (FPairedDevices[w].State = TBluetoothDeviceState.Connected) AND (n < 15) do begin
  31. Sleep(2000);
  32. DiscoveryD;
  33. w:= Damei(iUID);
  34. Inc(n);
  35. end;
  36. End Else Begin // Si el color no es BotonCogido Activo los servicios
  37. EjecutaExterno(iUID, '110E', '-c');
  38. EjecutaExterno(iUID, '110B', '-c');
  39. DiscoveryD;
  40. w:= Damei(iUID);
  41. while (FPairedDevices[w].State = TBluetoothDeviceState.Paired) AND (n < 15) do begin
  42. Sleep(2000);
  43. DiscoveryD;
  44. w:= Damei(iUID);
  45. Inc(n);
  46. end;
  47. End;
  48.  
  49. if NOT (N < 15) then Begin
  50. PanelMensaje.Caption:= '***** ERROR GESTIONANDO BLUETOOTH *****';
  51. Sleep(5000);
  52. End;
  53. End;
  54.  
  55. //------------------------------------------------------------------------------
  56. // ************** Ejecuta BTCOM para gestionar el BLUETOOTH ********************
  57. //------------------------------------------------------------------------------
  58. procedure TForm1.EjecutaExterno(DEVICE_ADDRESS, SERVICE_UUID, BTCOM_TIPE: STring);
  59. var h: HWND; Folder, Comando, Parametros: String;
  60. begin
  61. Folder := ExtractFilePath(Application.ExeName);
  62. Comando:= 'BtCom.exe';
  63. Parametros:= BTCOM_TIPE + ' -b"' + DEVICE_ADDRESS + '" -s' + SERVICE_UUID;
  64. ShellExecute(Handle, 'Open', PWideChar(Comando), PWideChar(Parametros), PWideChar(Folder), SW_HIDE);
  65. sleep(3000);
  66. h := FindWindow(nil, 'BtCom'); // Hago un bucle esperando que termine el programa Btcom
  67. while h <> 0 do Begin
  68. Sleep(3000);
  69. h := FindWindow(nil, 'BtCom');
  70. End;
  71. end;
  72.  
  73.  
  74. //------------------------------------------------------------------------------
  75. // ************** Calcula el componente BLUETOOTH según su dirección MAC *******
  76. //------------------------------------------------------------------------------
  77. function TForm1.Damei(Id: String): Integer;
  78. VAr i: Integer;
  79. Begin
  80. Result:= -1;
  81. for I := 0 to FPairedDevices.Count -1 do Begin
  82. if FPairedDevices.Items[i].address = Id then Begin
  83. Result:= I;
  84. Exit;
  85. End;
  86. End;
  87. End;

Y esto me permite conectar y desconectar los diferentes altavoces inalámbricos que tengo emparejados.
    i := (Sender as TAdvPanel).Tag; TAdvPanel corresponde a TMSSoftware

  • 1

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.259 mensajes
  • LocationMéxico

Escrito 08 febrero 2021 - 08:51

Muchas gracias por compartir la solución. (y)

 

Saludos


  • 0