有时无法从带有参数 BluetoothCacheMode.Cached
或 BluetoothCacheMode.Uncached
的方法 GetGattServicesAsync
获得一些响应。只有windows重启有助于重新连接文件设备并从文件设备获取服务。
我们使用 Windows.Devices.Bluetooth.dll
和 .Net Framework 4.6.1 来构建类库。 Windows PC 应连接蓝牙文件设备。
重现问题的步骤:
- 发现具有确定服务的设备
- 使用 LE 设备的蓝牙地址调用方法
FromBluetoothAddressAsync
- 找到蓝牙LED设备
将 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重启帮助建立与文件设备的连接。
电脑:
戴尔 Precision 5530
蓝牙适配器高通QCA6174A
Windows 10 企业版 (1803)
版本 10.0.17134 内部版本 17134.590
LE 设备:
- 蓝牙 4.2
问题:
是否可以避免 GetGattServicesAsync 的问题?
可能存在一些编程黑客来重新连接文件设备 在没有重启窗口的情况下取消 GetGattServicesAsync 之后?
最佳答案
我发现一些系统服务与这个问题有关。
您可以尝试在任务管理器中重启Bluetooth Support Service
。
如果要从TaskManager中识别进程,这个服务的命令行是
C:\WINDOWS\system32\svchost.exe -k LocalService -p -s bthserv
此解决方法并不完美,但比重新启动计算机稍微好一些。
但是,如果您想关闭与 BluetoothLE 设备的连接,请记住调用 BluetoothLEDevice.Dispose
。否则,您可能会在一个过程中遇到一些其他问题。
关于c# - Windows 蓝牙 le GetGattServicesAsync 方法中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55594814/