我无法使用Windows 10 API for Bluetooth重新连接到我的蓝牙低功耗设备,而无需每次都进行修复(Windows 8.1可以正常工作)。我能够通过代码与自定义设备配对,并且能够连接和订阅通知,但是当我断开连接并稍后再次尝试重新连接时,我在尝试订阅通知时会收到以下异常。
信号量超时期限已过期。 (HRESULT的例外情况: 0x80070079)
有时我得到:
' System.Exception的'在mscorlib.ni.dll中没有用户会话密钥 指定的登录会话。 (HRESULT异常:0x80070572)
在我的代码中,当我通过代码配对时,我将DevicePairingProtectionLevel设置为None,所以我不确定为什么它可能需要存储我的设备不存储的绑定信息。此外,相同的代码适用于Windows 8.1,您只需配对一次,然后自动连接。这是我的代码:
var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(new Guid("FE25C237-0ECE-443C-B0AA-E02033E7029D")));
if (devices.Count == 1)
bleDevice = devices[0];
else
Console.WriteLine("There was more than one Bluetooth device!");
accService = await GattDeviceService.FromIdAsync(bleDevice.Id);
accConfig = accService.GetCharacteristics(new Guid("27B7570B-359E-45A3-91BB-CF7E70049BD2"))[0];
accConfig.ValueChanged += rxCharacteristicValueChanged;
await accConfig.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
Here in the Microsoft docs it says (at the bottom)"此功能不适用于低功耗蓝牙(GATT客户端),因此您仍需要通过“设置”页面或使用Windows.Devices.Enumeration API进行配对以便访问这些设备。"在底部,这是否意味着每次连接时我都必须配对和取消配对?我可以通过代码配对和取消配对,但配对需要大约20-30秒,这太长了,不能指望我的用户等待那么久。