BLE 连接失败:连接因不可接受而被拒绝 BD_ADDR

BLE Connection failure : Connection is refused due to unacceptable BD_ADDR

我的设置如下:

  1. BLE 外围设备 Raspberry Pi 3
  2. AndroidPhone
  3. 中的 nRF 工具
  4. 我的应用程序在同一个 Android Phone(使用 react-native-ble-manager)

当我使用 nRF 工具连接到 Raspberry Pi 时,它连接成功。 但是,当我使用自己的 Android 应用程序连接时,它失败了。

在 Raspberry Pi 中,我 运行 sudo btmon 命令检查失败日志,如下所示:

> HCI Event: Connect Request (0x04) plen 10                                                                                                  [hci0] 143.774717
        Address: 88:A3:03:E7:18:EA (OUI 88-A3-03)
        Class: 0x5a020c
          Major class: Phone (cellular, cordless, payphone, modem)
          Minor class: Smart phone
          Networking (LAN, Ad hoc)
          Capturing (Scanner, Microphone)
          Object Transfer (v-Inbox, v-Folder)
          Telephony (Cordless telephony, Modem, Headset)
        Link type: ACL (0x01)
< HCI Command: Reject Connection Request (0x01|0x000a) plen 7                                                                                [hci0] 143.774802
        Address: 88:A3:03:E7:18:EA (OUI 88-A3-03)
        Reason: Connection Rejected due to Unacceptable BD_ADDR (0x0f)
> HCI Event: Command Status (0x0f) plen 4                                                                                                    [hci0] 143.775814
      Reject Connection Request (0x01|0x000a) ncmd 1
        Status: Success (0x00)
> HCI Event: Connect Complete (0x03) plen 11                                                                                                 [hci0] 143.897643
        Status: Connection Rejected due to Unacceptable BD_ADDR (0x0f)
        Handle: 0
        Address: 88:A3:03:E7:18:EA (OUI 88-A3-03)
        Link type: ACL (0x01)
        Encryption: Disabled (0x00)

日志中显示的错误是由于 BD_ADDR。 使用 nRF 工具时 bd_addr 是

Peer address type: Random (0x01)
Peer address: 58:B2:55:17:1A:92 (Resolvable)

一些我无法理解的奇怪的东西: 一旦我使用 nRF 工具绑定到 Raspberry Pi,然后尝试从我的应用程序连接到 Raspberry Pi,它就会连接。

我该如何解决这个问题?

您的事件日志显示您正在使用经典蓝牙进行连接。如果您想使用 BLE,请使用 connectGatt 变体,您可以在其中 select LE 作为传输参数。