【问题标题】:How to communicate with a bluetooth peripheral that does not have a PIN?如何与没有 PIN 码的蓝牙外设通信?
【发布时间】: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) 这在“从手机配对”和“从远程设备配对”场景中都是一样的。

标签: java android bluetooth


【解决方案1】:

显然,您的相机会启动配对过程,因为您不是从 Android 端进行配对的。

启动配对后,两个设备都会交换输入/输出功能。从这两个中选择“最佳”,即最安全的配对方法。例如,如果一台设备有显示器,而另一台设备有键盘,则随机生成的新密码会显示在带有显示器的设备上,用户应使用键盘在设备上输入该密码。

Android 总是宣传 i/o 功能“键盘、显示器”。这不能被任何 API 修改。

如果您的相机说它有显示功能,但它的显示屏上没有显示任何密钥,那么请责怪相机生产商没有遵循标准。

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多