Corebluetooth使用Swift获取设备名称
问题描述:
我在我的iOS应用程序中使用CoreBluetooth框架来扫描并连接到其他蓝牙设备。我能够成功地扫描使用下面的代码设备:Corebluetooth使用Swift获取设备名称
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始终是零。我是否缺少任何代码?
要添加更多的信息,
当我扫描了我的Mac蓝牙设备,我能看到设备的名称。但是当我在iPhone上扫描蓝牙设备时,它们都没有列出。
我交叉检查,确信我启用蓝牙的4台设备与
答
我在你的代码只是名字的来源改变了我(的iPad,2个Android手机和1的Android TV) - 而不是:
let localName = advertisementData[CBAdvertisementDataLocalNameKey]
我用:
let localName = peripheral.name
,现在我看到的名字我身边的BLE设备。
+0
我也尝试过。对于我而言,peripheral.name也是零 – Satyam
答
夫特3与芯蓝牙库:
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)
}
}
检查'advertisementData [CBAdvertisementDataLocalNameKey]''做peripherals.append(外围)'之前就存在。问题是广告数据包可以一个一个完成(由于限制的大小),并且完整的广告稍后出现。 – Larme
谢谢@Larme,我会添加该支票。我从iTunes中探索了一些其他应用程序,他们都显示标识符而不是名称。是不是可以获取iOS设备的名称? – Satyam