【问题标题】:Peripheral name is nil when scanning with CoreBluetooth on macOS在 macOS 上使用 CoreBluetooth 扫描时外设名称为零
【发布时间】:2020-09-10 10:08:27
【问题描述】:

当我在我的 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】:

    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)
    

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

    【讨论】:

    • 在我的测试中,这似乎与peripheral.name 匹配。即使我将其置于“可发现”模式,我的 iPhone 也不会在已发现的外围设备中按名称列出。有没有办法通过这个 API 识别 iPhone?
    猜你喜欢
    • 2018-04-29
    • 2012-12-02
    • 2019-05-03
    • 2016-05-06
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2013-05-10
    相关资源
    最近更新 更多