Bluetooth 蓝牙LE代码在Windows 8.1和10上的行为不同

Bluetooth 蓝牙LE代码在Windows 8.1和10上的行为不同,bluetooth,windows-10,Bluetooth,Windows 10,我使用的是微软在Windows8中引入的蓝牙低能耗(BLE)API,即蓝牙GATTXXX函数 我的代码在Windows 8.1上运行良好,但我观察到BluetoothGATTSetDescriptorValue在8.1和Windows 10之间的行为存在差异 情况如下: 将设备与Windows界面配对 找到它并通过调用BluetoothGATTSetDescriptorValue启用数据通知,以将ClientCharacteristicConfiguration的字段“IssuBScribeTN

我使用的是微软在Windows8中引入的蓝牙低能耗(BLE)API,即蓝牙GATTXXX函数

我的代码在Windows 8.1上运行良好,但我观察到BluetoothGATTSetDescriptorValue在8.1和Windows 10之间的行为存在差异

情况如下:

  • 将设备与Windows界面配对
  • 找到它并通过调用BluetoothGATTSetDescriptorValue启用数据通知,以将ClientCharacteristicConfiguration的字段“IssuBScribeTNotification”设置为true
  • 注册回调以接收新值(我尝试先注册回调,但效果不好)
  • 每次从设备发送新数据时都会调用回调
  • 一切都很好。现在,如果我关闭和打开设备,然后重复步骤2至4,它将在Windows 8.1上正常工作,但在Windows 10上不正常:

    BluetoothGATTSetDescriptorValue返回0x80070572,即。 HRESULT\u来自\u WIN32(错误\u无\u用户\u会话\u密钥)

    实际上,这意味着用户必须删除配对,并在每次设备关闭时重新进行配对

    该设备具有一些电源管理功能,如果闲置时间过长,将自动关闭,这使得问题更加严重。如果我不想让用户每次使用设备时都删除/重做配对,那么我似乎需要让它保持活动状态


    还有其他人也遇到这个问题吗?我在这里和网上尝试了几次搜索,但都没有成功。一个解决方案是以编程方式强制新的配对,由于没有用于此的API,这将是一个丑陋的黑客行为。我绝对不想走那条路……

    我遇到了同样的问题,你找到解决办法了吗?