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)