显示所有蓝牙低功耗(BLE)的名称

  • 在这个例子中,我有一个带有单个 BLE 设备启用的受控房间。
  • 你的类应该扩展 CBCentralManagerDelegate。
  • 实现方法:centralManagerDidUpdateState(_ central:CBCentralManager)。
  • 使用全局队列在搜索设备时不冻结屏幕。
  • 实例化 CBCentralManager 并等待回调 centralManagerDidUpdateState 响应。
class BLEController: CBCentralManagerDelegate{

var cb_manager: CBCentralManager!
var bles : [CBPeripheral] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        cb_manager = CBCentralManager(delegate: self, queue: DispatchQueue.global())
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        print("UPDATE STATE - \(central)")
    }
}

回调到 centralManagerDidUpdateState 表示 CoreBluetooth 准备就绪,因此你现在可以搜索 BLE。更新 centralManagerDidUpdateState 代码以在准备好时搜索所有 BLE 设备。

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    print("UPDATE STATE - \(central)")
    SearchBLE()
}

func SearchBLE(){
    cb_manager.scanForPeripherals(withServices: nil, options: nil)
    StopSearchBLE()
}

func StopSearchBLE() {
    let when = DispatchTime.now() + 5 // change 5 to desired number of seconds
    DispatchQueue.main.asyncAfter(deadline: when) {
        self.cb_manager.stopScan()
    }
}
  • SearchBLE() 搜索 BLE 设备并在 5s 后停止搜索
  • cb_manager.scanForPeripherals(withServices:nil,options:nil)查找范围内的每个 BLE。
  • StopSearchBLE() 将在 5s 后停止搜索。
  • 每个发现的 BLE 都会回调 func centralManager(_ central:CBCentralManager,didDiscover peripheral:CBPeripheral,advertisementData:[String:Any],rssi RSSI:NSNumber)
func centralManager(_ central: CBCentralManager, didDiscover peripheral:                                                             
    CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    guard let name = peripheral.name else {
        return
    }
    print(name)
    bles.append(peripheral)
}