【发布时间】:2022-06-11 19:23:22
【问题描述】:
我正在尝试创建一个 Android 应用程序来控制蓝牙设备。但该设备没有设置任何 PIN。 当我尝试使用“device.connectGatt”(或任何其他方法)连接时,配对开始。 然后电话显示要求输入 PIN 的 PIN 对话框。 不幸的是,该设备没有 PIN。所以无论我输入什么,都会被拒绝。 Android手机上的提示不允许null/none输入。
当我阅读蓝牙文档时,我了解到如果我可以将客户端 IO 功能设置为“无输入无显示”,我应该能够在没有 PIN 的情况下进行配对。 但是我找不到在 Android BLE 库中执行此操作的方法。 (Android 的东西有一个方法,但我用的是 Android 手机,所以我不能用它)
我阅读了类似的问题,发现一些用户无需 PIN 即可通过使用“正常工作”进行配对 但我找不到这是如何工作的。设置“just works”的方法是什么
我使用的是搭载 Android 12 的手机,当然针对 API 31。但如果有解决方案,我可以针对更低的 API。
如何与没有 PIN 码的设备进行通信/配对?
谢谢
【问题讨论】:
-
在这种情况下,远程设备很可能正在启动配对。
-
它同时接受入站和出站配对请求。但我需要从我的应用程序启动。有解决办法吗?
-
Android 永远不会自行启动配对过程,除非需要,例如当远程设备需要配对时。如果要在Android端手动触发配对,可以在
BluetoothDevice对象上调用createBond。使用密钥还是“正常工作”取决于远程设备所宣传的 i/o 功能。 -
远程设备将 IO 功能宣传为“无输入/无显示”,所以我猜 Android 需要 PIN。但是远程设备上没有 PIN。那我该怎么办?如果你说的是对的,那为什么我在 Android 上会有 PIN 提示?
-
手机发送 IO 功能:键盘、显示器 (0x04) 这在“从手机配对”和“从远程设备配对”场景中都是一样的。