EAAccessory.Name 与配对的设备名称不匹配



我有一个iOS应用程序。我可以成功连接到配对的 EAAccessory(蓝牙经典(。我能够从通过 EAAccessory 对象公开的设备中提取信息。我注意到的一件事是,配对的设备的名称(在我的"设置"->蓝牙->"我的设备"列表中(与我的 EAAccessory 对象公开的设备名称不匹配。我觉得这很奇怪。

有没有办法通过我的iOS应用程序获取设备的实际名称(来自"设置"页面的名称(?

你没有提到这是蓝牙经典还是BLE?,我下面的答案是针对蓝牙经典的,我记得我以前见过类似的东西,这是我到目前为止的发现:

请查看附件设计指南、第2.1.5部分,具体2.1.8

2.1.5:

在蓝牙发现过程中,苹果产品更喜欢 显示发现的配件的友好名称。在 2.1 之前 苹果产品必须使用的蓝牙规范版本 设置与附件的连接并执行远程名称请求, 这需要功率、天线时间和用户的时间。扩展调查 蓝牙 2.1 中引入的响应功能允许配件发送 其本地名称和其他信息作为查询响应的一部分 从而提高发现的速度和效率 过程。本地名称应与配件的标记匹配,并且 包装,不包含":"或";"。

另请查看设备类别部分

2.1.8:

每个与 Apple 产品兼容的配件都必须 使用定义的蓝牙 SIG 准确设置其设备类别 主要设备类和次要设备类。见第3卷C部分, 蓝牙核心规范中的第 3.2.4 节 ,版本 5.0.为 例如,打算在车辆中运行的音频/视频附件 应将主要设备类设置为音频/视频,将次要设备类设置为 汽车音响 .

您的情况可能只是配件具有友好名称,并且iOS当时没有清除该名称的缓存以进行设置,或者可能是固件端的错误实现。

如果这不能回答您的问题,请让我知道您在设置和应用程序中看到哪些名称,以及固件版本的配件类型(如果适用(,我将尝试进一步研究它。

如果您有配对/连接设备的广告 UUID,则可以获取配对/连接设备的列表。

var centralQueu = DispatchQueue(label: "A_NAME")
centralManager = CBCentralManager(delegate: self, queue: centralQueu, options: [CBCentralManagerOptionRestoreIdentifierKey: "RESTORE_KEY", CBCentralManagerOptionShowPowerAlertKey: true])
ServiceUUIDs = [CBUUID(string: "THE_UUID")]
//the array of CBUUIDs which you are looking for

您需要找到您感兴趣的服务 UUID:

var options = [
CBCentralManagerScanOptionAllowDuplicatesKey : (1)
]
centralManager.scanForPeripherals(withServices: [CBUUID(string: SERVICE_UUID)], options: options)
centralManager.retrieveConnectedPeripherals(withServices: ServiceUUIDs)

以这种方式处理 didDiscoverPeripheral :

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
discoveredPeripheral = peripheral
if !mRemoteDevices.contains(discoveredPeripheral) {
let peripherels = centralManager.retrievePeripherals(withIdentifiers: [discoveredPeripheral.identifier])
mRemoteDevices.append(peripherels[0])
}
}

这段代码从 Objective-C 转换为 Swift,如果你熟悉 Objective C,那么原始代码就在这里。

最新更新