我在我的iOS应用程序中使用CoreBluetooth框架来扫描并连接到其他蓝牙设备。我可以使用以下代码成功扫描设备:
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 TV)
答案 0 :(得分:1)
Swift与核心蓝牙库:
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber){
let peripheralLocalName_advertisement = ((advertisementData as NSDictionary).value(forKey: "kCBAdvDataLocalName")) as? String
if (((advertisementData as NSDictionary).value(forKey: "kCBAdvDataLocalName")) != nil)
print(peripheralLocalName_advertisement)//peripheral name from advertismentData
print(peripheral.name)//peripheral name from peripheralData
peripherals.append(peripheral)
arrayPeripheral.append(advertisementData)
}
}
答案 1 :(得分:0)
我在代码中仅更改了名称来源 - 而不是:
let localName = advertisementData[CBAdvertisementDataLocalNameKey]
我用:
let localName = peripheral.name
现在我看到了我周围BLE设备的名称。
答案 2 :(得分:0)
我在您的代码中仅更改了名称来源-而不是:
let localName = advertisementData[CBAdvertisementDataLocalNameKey]
我使用:
let localName = peripheral.name
现在我可以看到BLE设备的名称。