首页 > 解决方案 > iOS 蓝牙 scanForPeripheralsWithServices 后台运行仅适用于某些版本?

问题描述

我有一个可以在后台进行外围扫描的工作系统。重构我的代码后,此功能已停止工作。

我以为我刚刚错过了一些东西,但奇怪的是,如果我一起运行两个版本的应用程序(重构之前/之后)(使用不同的捆绑包 id),重构的版本就可以工作。有谁知道这可能是什么原因?

相关章节:

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    print("did update central manager")
    if central.state == .poweredOn {
        print("powered on central manager")
        let scanOptions = [CBCentralManagerScanOptionAllowDuplicatesKey: true]

        central.scanForPeripherals(withServices: [CBUUID(nsuuid: UUID.init(uuidString: "05D27C93-F0FE-43BB-A8CB-DECFED270F8F")!)], options: scanOptions)
    }
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    print(RSSI)
    DataCollector.logBluetoothData(advertisementData, RSSI)
    let uuid = BluetoothModel.extractUUID(advertisementData)
    bluetoothReading[uuid] = (Date().timeIntervalSince1970, Double(truncating: RSSI))
}

我觉得这可能与用户授予在后台收听的权限和开始收听之间的时间有关,但我认为基于以前版本的工作方式,情况并非如此.

标签: iosbluetoothcore-bluetooth

解决方案


问题解决了。事实证明,如果您还使用 iBeacon 设备,您可以继续对其进行监控。


推荐阅读