ios - 我如何在不读取 BLE 特性的情况下知道它是否已加密?

标签 ios swift bluetooth bluetooth-lowenergy

所以我有 1 个管理器和 1 个外围设备。 在外设端,我发送了一个具有 CBCharacteristicProperties.notifyEncryptionRequiredCBCharacteristicProperties.indicateEncryptionRequired 属性的特性, 用这一行:

char = CBMutableCharacteristic(type: charId, properties: CBCharacteristicProperties(rawValue: 0b1100000000), value: nil, permissions: [CBAttributePermissions.readEncryptionRequired, CBAttributePermissions.writeEncryptionRequired])

但是当我在中央阅读时,它只会给我

0b0000110000

这转换为 notifyindicate 属性。 为什么它不给我 0b1100000000?有什么我想念的吗?

我想做的是在没有配对的情况下检查我正在搜索的值是否加密。

当我尝试读取一个值时,如果它是加密的,我需要配对。将出现配对对话框。因为出现了配对对话,所以我知道它是加密的。我想在不看对话的情况下知道某个特征是否已加密。

最佳答案

我可以告诉你,我曾经在nRF connect中看到一条服务记录,它直接告诉我一个服务被加密了。但我不知道他们是怎么做到的。它背后的堆栈是 Linux 上的 BlueZ。我认为在服务记录中标记它是可能的

而且,我可以告诉你,大多数设备不会这样做。我正在耳机 CSR Controller 上实现固件。它上面的堆栈不提供执行此操作的 API。由于固件和应用程序都在我的控制之下,我可以告诉你:使用这个芯片无法知道特征是否加密。
遗憾的是,这种芯片被广泛传播。

关于ios - 我如何在不读取 BLE 特性的情况下知道它是否已加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54415170/

相关文章:

ios - SKVideoNode 不显示视频

swift 方法 : deinit is not invoked

ios - 在 iOS 12 中更改 UITabBarItem 角标(Badge)字体

ios - 如何禁用通过 Airplay 暂停/播放连接到 Apple TV 的 AVPlayer 的功能

iphone - 在 iOS 设备上处理触摸事件

ios - 在 Spritekit 中创建暂停菜单

ios - 如何快速检测正在编辑哪个 TextView

printing - Windows IoT - Zebra 蓝牙打印机

python - 如何在 Python 中查找可见的蓝牙设备?

linux - BLE广告 channel