【问题标题】:peripheral.name always returns null in CoreBluetooth Swift 3peripheral.name 在 CoreBluetooth Swift 3 中总是返回 null
【发布时间】:2018-03-01 02:34:12
【问题描述】:

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

我检查了名称是否显示在 LightBlue 应用程序中。它只显示“未命名”。请帮忙。

【问题讨论】:

  • 这是我在控制台中得到的:
  • 您有哪些扫描选项?你是不是一直等到它再次出现?由于adv数据有限,可能会按chunk更新。
  • 我正在使用以下行扫描外围设备。 self.centralManager?.scanForPeripherals(withServices: nil, options: nil) 我相信它会扫描其他设备,因为 UUID 不同。同样,设备名称为空。
  • stackoverflow.com/questions/12265028/… 检查名称是否为空,然后“忘记它”。等它重新出现。
  • 我试过这个。但每当我重新扫描时,它只会在名称中抛出 null。

标签: ios swift bluetooth core-bluetooth cbperipheral


【解决方案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)

然后去监听CBPeripheral委托

的方法
func peripheralDidUpdateName(_ peripheral: CBPeripheral)

您实际上可以在哪里获得更新的名称

我将立即断开他们的连接

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

在幕后发生这种情况是因为外围设备可以将其数据分成几个部分进行广播,而且名称通常不是先到者。

【讨论】:

  • CBCentralManagerScanOptionAllowDuplicatesKey:true 这救了我的命。谢谢!
猜你喜欢
  • 2018-02-10
  • 2017-02-10
  • 2021-09-16
  • 2015-12-03
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 2016-11-02
相关资源
最近更新 更多