如何使用Win10 UWP API实现BLE设备无绑定的'just works'配对
Win10 UWP BLE无绑定Just Works配对避开发起绑定请求方案
问题根本原因
UWP 标准PairAsync配对接口默认会触发系统级绑定存储流程,即便传入ConfirmOnly配对类型,只要指定了Encryption保护级别,系统就会主动向设备发送绑定请求存储链路密钥,导致不支持绑定的BLE设备拒绝配对。
正确实现步骤
- 不要使用默认配对接口
DeviceInformation.Pairing.PairAsync,该接口设计逻辑就是完成系统绑定,一定会发起绑定请求。 - 仅需无绑定Just Works配对时,无需提前调用任何配对接口,扫描到设备后直接连接GATT服务即可:
- 调用
BluetoothLEDevice.FromBluetoothAddressAsync传入设备MAC地址获取BLE设备实例 - 直接调用
GetGattServicesAsync访问GATT服务,Windows BLE栈会自动完成临时Just Works配对,不会发起绑定请求,也不会将设备存入系统蓝牙配对列表。
- 调用
- 必须显式调用配对接口的场景,使用自定义配对逻辑,注意参数配置:
// 注册自定义配对请求处理事件 deviceInfo.Pairing.Custom.PairingRequested += (sender, args) => { if (args.PairingKind == DevicePairingKinds.ConfirmOnly) { // 直接确认配对,不触发额外绑定流程 args.Accept(); } }; // 调用自定义配对,保护级别必须指定为None,不要用Encryption var pairingResult = await deviceInfo.Pairing.Custom.PairAsync( DevicePairingKinds.ConfirmOnly, DevicePairingProtectionLevel.None ); - 验证逻辑:配对完成后查看Windows系统蓝牙已配对设备列表,没有目标设备即说明没有触发绑定流程,设备侧不会收到绑定请求。
注意事项
你之前返回ProtectionLevelUsed为None但仍然发起绑定请求,就是因为传入了DevicePairingProtectionLevel.Encryption参数,系统会优先尝试绑定存储加密密钥,忽略配置的配对类型逻辑,替换为None即可解决。
内容的提问来源于stack exchange,提问作者denny
相关产品推荐
相关产品推荐

