在macOS上使用CoreBluetooth进行扫描时,外围设备名称为nil

问题描述 投票:1回答:1

[当我在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)
    }
}
swift macos core-bluetooth
1个回答
0
投票

Peripheral可以使用两个名称,一个用于广告,一个用于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)

某些设备可能会延迟报告。

© www.soinside.com 2019 - 2024. All rights reserved.