我正在使用CoreBluetooth框架在我的iOS应用程序中扫描并连接到其他蓝牙设备。我能够成功地使用以下代码扫描设备:
var centralManager: CBCentralManager?
var peripherals = [CBPeripheral]()
centralManager = CBCentralManager(delegate: self, queue: DispatchQueue.main)
在CBCentralManagerDelegate中,我实现了以下代码:
extension ViewController: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if (central.state == .poweredOn){
self.centralManager?.scanForPeripherals(withServices: nil, options: nil)
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if !peripherals.contains(peripheral) {
let localName = advertisementData[CBAdvertisementDataLocalNameKey]
print("\(String(describing: localName))" )
peripherals.append(peripheral)
tableView.reloadData()
}
}
}
从上面的代码可以看出,localName始终为nil。我漏掉了什么代码吗?
添加更多信息:
在我的Mac上扫描蓝牙设备时,我能够看到设备的名称。但当我在我的iPhone上扫描蓝牙设备时,没有列出任何设备。
我进行了交叉检查,并确保我启用了其他4个设备的蓝牙(iPad、2个Android手机和1个Android电视)。
peripherals.append(peripheral)
之前,请检查advertisementData[CBAdvertisementDataLocalNameKey]
是否存在。问题在于广告数据包可以分段完成(因为大小受限),完整的广告稍后才会到来。 - Larme