tutorial programming corebluetooth app swift3 core-bluetooth

swift3 - programming - xcode bluetooth explorer



didDiscover periférico no llamado (1)

Quiero usar el CBCentralManager para encontrar los periféricos bluetooth de baja energía a mi alrededor. CentralManager se está iniciando, se inicia correctamente y está escaneando. Pero la función didDiscover nunca se llama. Leí todas las otras publicaciones a este y un problema similar y estoy 99% seguro de que mi problema no tiene la misma causa. Aún así, no puedo encontrar lo que hice mal.

import Foundation import CoreBluetooth @objc(SmallerBeaconServiceImpl) class SmallerBeaconServiceImpl : NSObject, CBCentralManagerDelegate, CBPeripheralDelegate { private let centralManager : CBCentralManager func centralManagerDidUpdateState(_ central: CBCentralManager) { if central.state == CBManagerState.poweredOn && isRunning { startScanningForPeripherals() } print("updated state: /(central.state)") } func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { print(peripheral.name ?? "no name") } func startScanningForPeripherals() { if centralManager.state != CBManagerState.poweredOn { return } centralManager.scanForPeripherals(withServices: nil, options: nil) print("is scanning: /(centralManager.isScanning)") } private(set) var isRunning = false func startListening() { if isRunning { return } isRunning = true print("started.") startScanningForPeripherals() } func stopListening() { if !isRunning { return } isRunning = false centralManager.stopScan() } override init() { centralManager = CBCentralManager() super.init() print("initiated") } }


optional func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) es un método CBCentralManagerDelegate .

Su clase SmallerBeaconServiceImpl es compatible con CBCentralManagerDelegate , pero no estableció su centralManager delegate CBCentralManagerDelegate ( CBCentralManagerDelegate ). Es por eso que no se centralManager(_central:didDiscover:advertisementData:rssi) .

Esto se puede arreglar con:

centralManager = CBCentralManager(delegate: self, queue: nil)