当我在macOS应用程序中运行以下代码时-许多外围设备都没有名称-但是当我在同一台计算机上打开“蓝牙首选项”时,我可以看到它们的名称。
扫描蓝牙设备以获取其名称时,我缺少什么步骤?
import Foundation
import CoreBluetooth
class Scanner: NSObject, CBPeripheralDelegate, CBCentralManagerDelegate {
var centralManager: CBCentralManager?
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch (central.state) {
case .poweredOn:
print("BLE Powered On - scanning")
centralManager?.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])
break
default:
print("Unknown Case")
}
}
internal func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber)
{
print("discovered: \(peripheral.name ?? "nil")")
}
func start() {
print("starting central manager")
centralManager = CBCentralManager(delegate: self, queue: nil)
}
}
答案 0 :(得分:0)
外围设备可以使用两个名称,一个用于广告,一个用于GAP,请尝试同时使用两个名称(或任何存在的名称),如下所示:
internal func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber)
{
print("advertised: \(advertisementData[CBAdvertisementDataLocalNameKey] as? String ?? "nil")")
print("GAP name: \(peripheral.name ?? "nil")")
}
您还可以使用CBPeripheralDelegate
通过回调观察名称更新
@available(iOS 6.0, *)
optional func peripheralDidUpdateName(_ peripheral: CBPeripheral)
某些设备可能会延迟报告。