UWP使用Microsoft.Windows.SDK.Contracts实现BluetoothLE配对失败问题咨询
Windows平台BLE带PIN码配对实现方案
配对失败原因
你直接调用PairAsync方法失败的核心原因是:你的设备需要PIN码验证完成配对流程,默认无配套回调的PairAsync不会处理PIN码输入逻辑,没有响应设备的配对验证请求,自然会配对超时/失败。
正确实现步骤
- 调用配对方法前,先给
DeviceInformation.Pairing对象注册PairingRequested事件处理回调 - 在回调逻辑中判断配对验证类型,匹配到需要PIN码的请求时,调用
Accept方法传入设备对应的PIN码,完成验证 - 再调用
PairAsync方法即可完成带PIN码的配对流程
代码示例
// 注册配对请求事件回调 info.Pairing.PairingRequested += (sender, args) => { // 匹配需要输入PIN码的配对场景 if (args.PairingKind == DevicePairingKinds.ProvidePin) { // 传入设备PIN码,若为用户动态输入场景可在此处插入UI逻辑获取用户输入的PIN args.Accept("123456"); // 替换为你的设备实际PIN码 } }; // 执行配对操作 DevicePairingResult result = await info.Pairing.PairAsync(DevicePairingProtectionLevel.EncryptionAndAuthentication);
关于无需配对即可访问属性的说明
BLE协议本身就允许未配对的主设备访问从设备公开的非加密GATT属性,比如设备名称、公开服务UUID、未加密的特征值等,只有被设备标记为需要加密/绑定才能访问的特征值,才要求完成配对流程后才能读写,这是BLE的标准设计,不是Windows平台的特殊逻辑。
内容的提问来源于stack exchange,提问作者ESD
相关产品推荐
相关产品推荐

