c# - Windows 蓝牙 le GetGattServicesAsync 方法中的错误

标签 c# .net windows windows-10 bluetooth-lowenergy

有时无法从带有参数 BluetoothCacheMode.CachedBluetoothCacheMode.Uncached 的方法 GetGattServicesAsync 获得一些响应。只有windows重启有助于重新连接文件设备并从文件设备获取服务。

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

重现问题的步骤:

  1. 发现具有确定服务的设备
  2. 使用 LE 设备的蓝牙地址调用方法 FromBluetoothAddressAsync
  3. 找到蓝牙LED设备
  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重启帮助建立与文件设备的连接。

电脑:

  • 戴尔 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/

相关文章:

c# - 从参数化的 sql 查询中获取 SQL 语句

c# - 使用数据绑定(bind)处理样式

c# - IEnumerable Group 按用户指定的动态键列表

linux - 使用 SAS EG 包含文件时如何指定本地目录?

windows - 检查当前目录名称中是否包含空格

c# - MVC3 EnumDropdownList 选定值

c# - 字符串变量可以设置多少个字符?

c# - 为结构引用启用属性语法?

c# - 无法解密使用 AesManaged 加密的文件

windows - 处理软件正在使用的文件时如何避免 I/O 错误 32