所以我有 1 个管理器和 1 个外围设备。
在外设端,我发送了一个具有 CBCharacteristicProperties.notifyEncryptionRequired
和 CBCharacteristicProperties.indicateEncryptionRequired
属性的特性,
用这一行:
char = CBMutableCharacteristic(type: charId, properties: CBCharacteristicProperties(rawValue: 0b1100000000), value: nil, permissions: [CBAttributePermissions.readEncryptionRequired, CBAttributePermissions.writeEncryptionRequired])
但是当我在中央阅读时,它只会给我
0b0000110000
这转换为 notify
和 indicate
属性。
为什么它不给我 0b1100000000?有什么我想念的吗?
我想做的是在没有配对的情况下检查我正在搜索的值是否加密。
当我尝试读取一个值时,如果它是加密的,我需要配对。将出现配对对话框。因为出现了配对对话,所以我知道它是加密的。我想在不看对话的情况下知道某个特征是否已加密。
最佳答案
我可以告诉你,我曾经在nRF connect中看到一条服务记录,它直接告诉我一个服务被加密了。但我不知道他们是怎么做到的。它背后的堆栈是 Linux 上的 BlueZ。我认为在服务记录中标记它是可能的。
而且,我可以告诉你,大多数设备不会这样做。我正在耳机 CSR Controller 上实现固件。它上面的堆栈不提供执行此操作的 API。由于固件和应用程序都在我的控制之下,我可以告诉你:使用这个芯片无法知道特征是否加密。
遗憾的是,这种芯片被广泛传播。
关于ios - 我如何在不读取 BLE 特性的情况下知道它是否已加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54415170/