核心蓝牙状态恢复只发射一次

时间:2016-06-10 17:09:20

标签: swift bluetooth bluetooth-lowenergy

尝试让核心蓝牙状态恢复在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 ......任何人都有任何想法吗?

1 个答案:

答案 0 :(得分:0)

CBCentralManager有一个方法scanForPeripherals(withServices:options:),您可以在其中指定扫描选项。默认情况下,此管理器为收到的多个外围数据包生成一个发现事件,如docs中所述。您必须在true for options字典下传递CBCentralManagerScanOptionAllowDuplicatesKey值才能获得预期效果:

  

过滤被禁用,并且每次中央从外围设备接收广告数据包时都会生成发现事件

然后,状态恢复的委托方法将被多次调用,但仅在必须被调用时,即在发现事件服务被禁用之间。