我有一个iOS应用程序。我可以成功连接到我的配对EAAccessory (经典蓝牙)。我能够从通过EAAccessory对象公开的设备中提取信息。我注意到的一件事是配对的设备的名称(在我的设置->蓝牙->我的设备列表中)与我的EAAccessory对象公开的设备的名称不匹配。我觉得这很奇怪。
有没有办法通过我的iOS应用程序获取设备的实际名称(来自设置页面)?
发布于 2018-06-21 21:13:56
你没有提到这是蓝牙Classic还是BLE ?,我下面的答案是蓝牙Classic,我记得我以前见过这样的东西,这是我到目前为止的发现:
请看一下Accessory Design Guidelines,特别是2.1.5和2.1.8部分。
2.1.5:
在蓝牙发现过程中,苹果产品更喜欢显示发现的附件的友好名称。在2.1版本的蓝牙规范之前,Apple产品必须建立到附件的连接并执行远程名称请求,这需要耗费电源、天线时间和用户时间。蓝牙2.1中引入的扩展查询响应功能允许附件将其本地名称和其他信息作为查询响应的一部分发送,从而提高发现过程的速度和效率。本地名称应与附件的标记和包装相匹配,并且不包含':‘或';’。
另请查看设备类部分
2.1.8:
每个与苹果产品兼容的附件都必须使用蓝牙SIG定义的主要设备类和次要设备类准确设置其设备类。请参阅蓝牙核心规范5.0版中的第3卷,C部分,3.2.4节。例如,打算在车辆中运行的音频/视频附件应将主要设备类别设置为音频/视频,将次要设备类别设置为汽车音频。
您的情况可能只是附件具有友好名称的事实,并且iOS在设置时没有清除该名称的缓存,或者这可能是固件端的错误实现。
如果这不能回答你的问题,请让我知道你在设置和你的应用程序中看到了什么名字,以及这是什么类型的附件,如果适用于固件版本,我将尝试进一步调查。
发布于 2018-06-21 15:31:01
如果您有成对/连接的设备的通告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,则原始代码为here.
https://stackoverflow.com/questions/50828815
复制相似问题