繁体   English   中英

Windows蓝牙中的错误GetGattServicesAsync方法

[英]Bug in windows bluetooth le GetGattServicesAsync method

有时,无法从GetGattServicesAsync方法GetGattServicesAsync带有参数BluetoothCacheMode.CachedBluetoothCacheMode.Uncached响应。 只有Windows重新启动才能帮助重新连接文件设备并从文件设备获取服务。

我们将Windows.Devices.Bluetooth.dll与.Net Framework 4.6.1一起使用来构建类库。 Windows PC将连接蓝牙文件设备。

问题重现的步骤:

  1. 发现具有确定服务的设备
  2. 使用LE设备的蓝牙地址调用方法FromBluetoothAddressAsync
  3. 找到BluetoothLEDevice
  4. 将LE设备与桌面配对:

     DeviceInformationPairing loPairingInf = poDevice.DeviceInformation.Pairing; if (!loPairingInf.IsPaired) { DevicePairingKinds loConfirm = DevicePairingKinds.ConfirmOnly; DevicePairingProtectionLevel loProtectionLevel = DevicePairingProtectionLevel.Default; DeviceInformationCustomPairing loCustomPairing = loPairingInf.Custom; } 
  5. 检查连接状态。 如果状态已连接,则调用方法GetGattServicesAsync(BluetoothCacheMode.Cached) 有时无法从GetGattServicesAsync获得响应。 30秒后,我们取消任务,处置BluetoothLEDevice ,解除BluetoothLEDevice并尝试重新连接该设备。 重新连接失败,只有重新启动Windows才能帮助建立与文件设备的连接。

PC:

  • 戴尔Precision 5530

  • 蓝牙适配器高通QCA6174A

  • Windows 10企业版(1803)

  • 版本10.0.17134内部版本17134.590

LE设备:

  • 蓝牙4.2

题:

  • 是否可以避免GetGattServicesAsync的问题?

  • 取消GetGattServicesAsync后,如果没有重新启动Windows,也许存在一些编程黑客来重新连接文件设备?

我发现一些系统服务与此问题有关。

您可以尝试在TaskManager中重新启动Bluetooth Support Service

如果要从TaskManager识别进程,则此服务的命令行为

C:\\ WINDOWS \\ system32 \\ svchost.exe -k LocalService -p -s bthserv

此解决方法并不完美,但比重新启动计算机要好一些。

但是,请记住致电BluetoothLEDevice.Dispose如果要关闭与BluetoothLE设备的连接,请处置。 否则,您可能会在一个过程中遇到其他问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM