Hallo allerseits,
Windows speichert bei mir (auf drei Rechnern) seit dem letzten Update die gepairten BluetoothLE-Verbindungen nicht mehr.
Die BluetoothLE-Implementierung von Delphi 10.2.3 und 10.3 kann unter Windows aber nur mit gepairten Verbindungen umgehen.
Dies beißt sich leider und führt dazu, dass ich nach jedem Systemstart umständlich die Devices (Herzfrequenz, Watt-Pedal, RPM-Messung und Smart-Trainer-Rolle) unter Windows (bzw. mit Bluetooth LE Explorer) nochmals pairen muss, bevor mein Programm diese nochmals benutzen kann.
Das Thema liegt auch schon beim Delphi-Support, aber hat hier jemand für das Probleme eine pfiffige Lösung?
Selbst kann man das pairen aus Delphi heraus wahrscheinlich nicht anstoßen, oder?
Ich kann zwar durch eine kleine Anpassung in System.Win.BluetoothWinRT das Device verbinden, dann finden sich aber keine Services (bzw. nur bei einem von vier Devices):
Delphi-Quellcode:
procedure TWinRTBluetoothLEDevice.CheckInitialized;
var
LBLEDeviceAsyncOp: IAsyncOperation_1__IBluetoothLEDevice;
begin
if (FBluetoothLEDevice = nil) or FClosed then
begin
if FId = 0 then
//Beginn alter Code
// raise EBluetoothDeviceException.Create(SBluetoothLEDeviceNotPaired);
//Ende alter Code
//Beginn neuer Code
begin
if TAsyncOperation<IAsyncOperation_1__IBluetoothLEDevice>.Wait(
TBluetoothLEDevice.Statics.FromBluetoothAddressAsync(FAddress), LBLEDeviceAsyncOp) = AsyncStatus.Completed then
begin
FBluetoothLEDevice := LBLEDeviceAsyncOp.GetResults;
FClosed := False;
if DeviceName = '' then
FDeviceName := FBluetoothLEDevice.Name.ToString;
FConnectionStatusChangeDelegate := TConnectionStatusChangeEventHandler.Create(Self);
FBluetoothLEDevice.add_ConnectionStatusChanged(FConnectionStatusChangeDelegate);
end;
end
//Ende neuer Code
else if TAsyncOperation<IAsyncOperation_1__IBluetoothLEDevice>.Wait(
TBluetoothLEDevice.Statics.FromIdAsync(FId), LBLEDeviceAsyncOp) = AsyncStatus.Completed then
Grüße, Philipp