didDiscover 外设未调用
didDiscover peripheral not called
我想使用 CBCentralManager 来找到我周围的蓝牙低功耗外设。 centralManager 正在启动,它正确启动并且正在扫描。但是从未调用过 didDiscover 函数。我阅读了有关此问题和类似问题的所有其他帖子,并且 99% 确定我的问题的原因不同。仍然,我找不到我做错了什么。
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)
是一种 CBCentralManagerDelegate
方法。
您的 class SmallerBeaconServiceImpl
符合 CBCentralManagerDelegate
,但您没有设置 centralManager
delegate
(CBCentralManagerDelegate
) 属性。这就是 centralManager(_central:didDiscover:advertisementData:rssi)
没有被调用的原因。
这可以通过以下方式解决:
centralManager = CBCentralManager(delegate: self, queue: nil)
我想使用 CBCentralManager 来找到我周围的蓝牙低功耗外设。 centralManager 正在启动,它正确启动并且正在扫描。但是从未调用过 didDiscover 函数。我阅读了有关此问题和类似问题的所有其他帖子,并且 99% 确定我的问题的原因不同。仍然,我找不到我做错了什么。
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)
是一种 CBCentralManagerDelegate
方法。
您的 class SmallerBeaconServiceImpl
符合 CBCentralManagerDelegate
,但您没有设置 centralManager
delegate
(CBCentralManagerDelegate
) 属性。这就是 centralManager(_central:didDiscover:advertisementData:rssi)
没有被调用的原因。
这可以通过以下方式解决:
centralManager = CBCentralManager(delegate: self, queue: nil)