Windows 蓝牙 GetGattServicesAsync 方法中的错误

问题描述 投票:0回答:2

有时无法从带有参数

GetGattServicesAsync
BluetoothCacheMode.Cached
的方法
BluetoothCacheMode.Uncached
获得某些响应。只有重新启动 Windows 才能重新连接 le 设备并从 le 设备获取服务。

我们使用

Windows.Devices.Bluetooth.dll
和 .Net Framework 4.6.1 来构建类库。 Windows PC 应连接蓝牙文件设备。

问题重现步骤:

  1. 发现具有确定服务的设备
  2. 使用 LE 设备的蓝牙地址调用方法
    FromBluetoothAddressAsync
  3. 找到蓝牙LE设备
  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
    ,取消配对并尝试重新连接设备。重连失败,只有windows重启才能帮助建立与le设备的连接。

电脑:

  • 戴尔 Precision 5530

  • 蓝牙适配器高通QCA6174A

  • Windows 10 企业版 (1803)

  • 版本 10.0.17134 内部版本 17134.590

LE 设备:

  • 蓝牙4.2

问题:

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

  • 也许存在一些以编程方式重新连接文件设备的黑客行为 GetGattServicesAsync 取消后而不重新启动窗口?

c# .net windows windows-10 bluetooth-lowenergy
2个回答
0
投票

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

您可以尝试在任务管理器中重新启动

Bluetooth Support Service

如果你想从TaskManager中识别进程,该服务的命令行是

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

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

但是,如果您想关闭与BluetoothLE 设备的连接,请记得致电

BluetoothLEDevice.Dispose
。否则,您可能会在一个过程中遇到其他问题。


0
投票

你找到解决方案了吗,我也遇到同样的问题?

© www.soinside.com 2019 - 2024. All rights reserved.