peripheral.name始终在CoreBluetooth Swift 3中返回null

时间:2017-09-20 06:53:13

标签: ios swift bluetooth core-bluetooth cbperipheral

我一直试图获取附近外围设备的名称。它通过显示其标识符RSSI但不显示名称来检测外围设备。我在iPhone 5s,Android手机,Mac OS中打开了蓝牙。我很困惑它正在检测哪一个。

我检查了LightBlue App中是否显示了该名称。它只显示“未命名”。请帮忙。

1 个答案:

答案 0 :(得分:-1)

我使用这个:

首先,我使用一些选项进行扫描。

manager.scanForPeripherals(withServices: nil,
                                   options: [CBCentralManagerScanOptionAllowDuplicatesKey:true, CBConnectPeripheralOptionNotifyOnConnectionKey: false, CBConnectPeripheralOptionNotifyOnDisconnectionKey: false, CBConnectPeripheralOptionNotifyOnNotificationKey: false])

请注意 CBCentralManagerScanOptionAllowDuplicatesKey 扫描选项,请仔细阅读。不一定要实现它。就我而言。

然后我要签入

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)

如果名称存在于 AdvertisementData CBPeripheral

实例中

如果未公开姓名,则可以尝试连接

central.connect(peripheral, options: nil)

然后听 CBP外围设备委托

的方法
func peripheralDidUpdateName(_ peripheral: CBPeripheral)

实际上可以获取更新名称的地方

我立即断开与他们的联系

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        central.cancelPeripheralConnection(peripheral)
    }

内幕之所以发生,是因为外围设备可以广播分成几部分的数据,而且该名称通常不是先来者。