顯示所有藍芽低功耗(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)
}