didDiscover 外围设备未调用
Posted
技术标签:
【中文标题】didDiscover 外围设备未调用【英文标题】:didDiscover peripheral not called 【发布时间】:2016-12-12 14:12:06 【问题描述】:我想使用 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")
【问题讨论】:
你没有设置centralManager
的代理。
@Larme:我肯定会添加它作为答案,以便它可以被接受。
这绝对有帮助。谢谢你!我很乐意将此标记为正确答案!
【参考方案1】:
optional func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)
是一个CBCentralManagerDelegate
方法。
您的课程SmallerBeaconServiceImpl
符合CBCentralManagerDelegate
,但您没有设置centralManager
delegate
(CBCentralManagerDelegate
) 属性。这就是为什么不调用 centralManager(_central:didDiscover:advertisementData:rssi)
的原因。
这可以通过以下方式解决:
centralManager = CBCentralManager(delegate: self, queue: nil)
【讨论】:
以上是关于didDiscover 外围设备未调用的主要内容,如果未能解决你的问题,请参考以下文章
在后台没有得到 didDiscover 外围 ibeacon