显示所有蓝牙低功耗(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)
}