【发布时间】:2018-02-05 01:58:27
【问题描述】:
我在我的 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 总是为零。我错过了任何代码吗?
要添加更多信息,
当我在我的 Mac 中扫描蓝牙设备时,我可以看到设备的名称。但是当我在 iPhone 上扫描蓝牙设备时,它们都没有列出。
我反复检查并确保我在另外 4 台设备(iPad、2 部 Android 手机和 1 部 Android 电视)上启用了蓝牙
【问题讨论】:
-
在执行
peripherals.append(peripheral)之前检查advertisementData[CBAdvertisementDataLocalNameKey]是否存在。问题是广告包可以一块一块地做(由于大小限制),完整的广告在后面。 -
谢谢@Larme,我会加上那张支票。我从 iTunes 中探索了一些其他应用程序,所有这些应用程序都显示标识符而不是名称。是不是无法在 iOS 中获取设备名称?
标签: ios swift core-bluetooth