Corebluetooth用斯威夫特来获取设备名称

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

我用我的iPhone应用程序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手机和Android的1 TV)

ios swift core-bluetooth
2个回答
0
投票

我在你的代码只是名字的来源发生变化 - 而不是:

let localName = advertisementData[CBAdvertisementDataLocalNameKey]

我用:

let localName = peripheral.name

现在我看到周围的BLE装置名称。


1
投票

斯威夫特与蓝牙核心库:

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

    let peripheralLocalName_advertisement = ((advertisementData as NSDictionary).value(forKey: "kCBAdvDataLocalName")) as? String

    if (((advertisementData as NSDictionary).value(forKey: "kCBAdvDataLocalName")) != nil)

         print(peripheralLocalName_advertisement)//peripheral name from advertismentData

         print(peripheral.name)//peripheral name from peripheralData

         peripherals.append(peripheral) 

         arrayPeripheral.append(advertisementData)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.