iOS Core Bluetooth - 无法通过扫描发现真实设备

iOS Core Bluetooth - Can't discover the real device from scan

我正在尝试发现蓝牙设备并通过使用 CBCentralManager 连接到它。该设备是耳机。可以通过 phone 上的蓝牙扫描发现。设备名称是 "A1-25"。当我直接从 phone 蓝牙设置连接 "A1-25" 时,我可以用它播放歌曲,它工作正常。

但是,当我开始使用 CBCentralManager 扫描外围设备时。我看不到名为 "A1-25" 的外围设备。相反,我看到了一个名为 "EQ_Test_llyan" 的外围设备。但是之前,当我从蓝牙设置扫描附近的设备时,"EQ_Test_llyan"没有出来。

2017-12-13 16:35:07.233021+0800 Test[1405:500801] started scanning
2017-12-13 16:35:17.469375+0800 Test[1405:500801] discovered peripheral with name EQ_Test_llyan advertisementData:{
    kCBAdvDataIsConnectable = 1;
    kCBAdvDataLocalName = "EQ_Test_llyan";
    kCBAdvDataManufacturerData = <b0024551 5f544553 54>;
}
2017-12-13 16:35:17.470672+0800 Test[1405:500801] connecting with device!!!!!!!
2017-12-13 16:35:17.654884+0800 Test[1405:500801] connected to peripheral name:EQ_Test_llyan id:7326E741-BF68-D9E8-D7A6-5F27227685A7
2017-12-13 16:35:17.656526+0800 Test[1405:500801] discovering services for peripheral name:EQ_Test_llyan
2017-12-13 16:35:18.193311+0800 Test[1405:500801] discovered services:(
) for peripheral name:EQ_Test_llyan

外设"EQ_Test_llyan"没有服务(见上面的日志),所以我无法与之通信。现在,当我回到 phone 设置中的蓝牙设备时,我现在已连接到 "EQ_Test_llyan",但未连接到 "A1-25"。现在,我尝试播放音乐,耳机中没有声音。

当我关闭耳机时,我将与 "EQ_Test_llyan" 断开连接,"A1-25" 将消失。因此我得出结论 "EQ_Test_llyan" 和 "A1-25" 来自同一台设备。

请注意,我可以同时连接到两者。我将以编程方式连接到 "EQ_Test_llyan",然后它将出现在设置中。然后我从 phone 设置手动连接到 "A1-25"。它将如下图所示。当我播放音乐时,我仍然可以听到从耳机中传出的声音。因此,只要我连接到 "A1-25",它就可以正常工作,但不能单独连接到 "EQ_Test_llyan"。

所以我的问题是:

  1. CBPeripheral 是指实际设备吗?因为如果是的话 为什么我不能扫描 "A1-25" 但我可以扫描 "EQ_Test_llyan"?
  2. 请注意,当 phone 连接到 "A1-25" 时,它有一个 "i" 除此之外,这意味着可以终止连接。但 当 phone 连接到 "EQ_Test_llyan" 时,没有 "i" 在它旁边。所以,它不能断开,除非你关闭 设备。那么,两者有什么区别呢? "AI-25" 是 真实设备,而 "EQ_Test_llyan" 只是一个连接?我不 明白了。

您无法从 CBCentralManager 中发现 "A1-25",因为它是您提到的耳机。 Headset使用Headset Profile(HSP),也就是众所周知的"Bluetooth Classic" profile,而Core Bluetooth只适用于Bluetooth Low Energy(BLE,蓝牙4.0)General Attribute Profile(GATT)。如果您检查 CoreBluetooth API,您会发现它全都与服务和特性有关。它没有对声音相关配置文件的抽象。

另一方面,GATT 是非常通用和抽象的配置文件,可以被任何类型的设备使用,每次都可以用于一些非常具体的数据——速度、温度、心率、一些设备配置,以及虚拟任何其他值。因此,您只能通过识别该设备的应用程序与 GATT 设备配对。您与 phone 设置屏幕中的此类通用服务无关。