Как обнаружить устройство Bluetooth Classic в iOS 13 с помощью Core bluetooth Framework

Я пытаюсь обнаружить устройство Bluetooth LE и Classic (BR/EDR), используя платформу Core Bluetooth в своем приложении, работающем на iOS-13. Но я могу найти только устройства BLE.

Как я могу сканировать устройства Bluetooth Classic?

После инициализации CBCentralManager и получения состояния CentralManager как включенного я сканирую периферийные устройства, передавая nil в Services and Options.

Код, указанный ниже: -

private var cbManager: CBCentralManager!

override func viewDidLoad() {
     super.viewDidLoad()
     cbManager = CBCentralManager(delegate: self, queue: nil)
}

func centralManagerDidUpdateState(_ central: CBCentralManager) {
     switch central.state {
        case .poweredOn:
             cbManager.scanForPeripherals(withServices: nil, options:nil)

        default:
             os_log("Cleaning up cbManager")
     }
}


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

     if let name = peripheral.name {
         print(name)
     }
}

Благодаря этому я получаю только устройства BLE. Ожидаемый результат должен быть следующим: список устройств BLE и Classic (BR/EDR).


person bhumika    schedule 16.07.2019    source источник


Ответы (1)


Внутри вашего .powerOn добавьте это, чтобы иметь возможность сопоставлять UUID определенной службы.

let matchingOptions = [CBConnectionEventMatchingOption.serviceUUIDs: [uuid-to-classic-bt-device]]
            cbManager.registerForConnectionEvents(options: matchingOptions)

Затем в методе делегата centralManager:connectionEventDidOccur:forPeripheral: вы можете проверить события .peerDisconnected и .peerConnected, чтобы сделать что-то с найденным периферийным устройством.

Apple предоставляет пример этого использования Core Bluetooth Classic.

person troligtvis    schedule 16.07.2019
comment
Как я могу получить правильный uuid-to-classic-bt-device для использования с конкретным устройством? - person Andrea Gorrieri; 28.10.2019
comment
@AndreaGorrieri, вы смогли выяснить, как получить правильный UUID для классического устройства BT? - person sublimepremise; 01.11.2019
comment
@sublimepremise Я узнал, что новая поддержка BR / EDR предназначена исключительно для классических устройств Bluetooth, которые реализуют профиль GATT. UUID, который должен быть предоставлен в matchOptions для метода registerForConnectionEvents, является UUID GATT, а не UUID SDP. Это означает, что с CoreBluetooth вы не можете зарегистрироваться для событий подключения для устройства, которое реализует профили A2DP или HFP. См. здесь stackoverflow. com/questions/58592698/ - person Andrea Gorrieri; 04.11.2019