有时无法从带有参数
GetGattServicesAsync
或 BluetoothCacheMode.Cached
的方法 BluetoothCacheMode.Uncached
获得某些响应。只有重新启动 Windows 才能重新连接 le 设备并从 le 设备获取服务。
我们使用
Windows.Devices.Bluetooth.dll
和 .Net Framework 4.6.1 来构建类库。 Windows PC 应连接蓝牙文件设备。
问题重现步骤:
FromBluetoothAddressAsync
将 LE 设备与桌面配对:
DeviceInformationPairing loPairingInf = poDevice.DeviceInformation.Pairing;
if (!loPairingInf.IsPaired)
{
DevicePairingKinds loConfirm = DevicePairingKinds.ConfirmOnly;
DevicePairingProtectionLevel loProtectionLevel = DevicePairingProtectionLevel.Default;
DeviceInformationCustomPairing loCustomPairing = loPairingInf.Custom;
}
检查连接状态。如果状态为已连接,则调用方法
GetGattServicesAsync(BluetoothCacheMode.Cached)
。有时无法得到GetGattServicesAsync
的回复。 30 秒后,我们取消任务,处理 BluetoothLEDevice
,取消配对并尝试重新连接设备。重连失败,只有windows重启才能帮助建立与le设备的连接。电脑:
戴尔 Precision 5530
蓝牙适配器高通QCA6174A
Windows 10 企业版 (1803)
版本 10.0.17134 内部版本 17134.590
LE 设备:
问题:
是否可以避免 GetGattServicesAsync 的问题?
也许存在一些以编程方式重新连接文件设备的黑客行为 GetGattServicesAsync 取消后而不重新启动窗口?
我发现一些系统服务与此问题相关。
您可以尝试在任务管理器中重新启动
Bluetooth Support Service
。
如果你想从TaskManager中识别进程,该服务的命令行是
C:\WINDOWS\system32\svchost.exe -k LocalService -p -s bthserv
此解决方法并不完美,但比重新启动计算机稍好一些。
但是,如果您想关闭与BluetoothLE 设备的连接,请记得致电
BluetoothLEDevice.Dispose
。否则,您可能会在一个过程中遇到其他问题。
你找到解决方案了吗,我也遇到同样的问题?