尝试让核心蓝牙状态恢复在swift中始终如一地工作,但我似乎只能触发一次,然后它不再响应...
到目前为止,我在班级init:
override init() {
super.init()
let centralQueue = dispatch_queue_create("com.domain.app", DISPATCH_QUEUE_SERIAL)
centralManager = CBCentralManager(delegate: self, queue: centralQueue, options: [CBCentralManagerOptionRestoreIdentifierKey: "myCentralManager", CBCentralManagerOptionShowPowerAlertKey: true])
}
和我的WillRestoreState委托:
func centralManager(central: CBCentralManager, willRestoreState dict: [String : AnyObject]) {
let peripheral = dict[CBCentralManagerRestoredStatePeripheralsKey]
for peripheral in peripherals as! [CBPeripheral] {
showGenericNotification("BLE \(peripheral)")
peripheral.delegate = bleService
}
}
然后当我从BLE设备发送数据时,showNotification()会在我的通知中心发出通知..它只会触发一次,然后停止响应。 bleService是具有管理外设的CBPeripheralDelegate的实例
似乎没有代表分配给bleService ......任何人都有任何想法吗?
答案 0 :(得分:0)
CBCentralManager
有一个方法scanForPeripherals(withServices:options:)
,您可以在其中指定扫描选项。默认情况下,此管理器为收到的多个外围数据包生成一个发现事件,如docs中所述。您必须在true
for options字典下传递CBCentralManagerScanOptionAllowDuplicatesKey
值才能获得预期效果:
过滤被禁用,并且每次中央从外围设备接收广告数据包时都会生成发现事件
然后,状态恢复的委托方法将被多次调用,但仅在必须被调用时,即在发现事件服务被禁用之间。