簡體   English   中英

如何在后台掃描BLE設備?

[英]How to scan BLE devices in Background?

我想像前景一樣在背景上掃描BLE設備。 但是我的iOS應用程序無法正常運行。 下面是我的AppDelegate類代碼。

private var centralManager : CBCentralManager!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    centralManager = CBCentralManager(delegate: self, queue: nil, options: nil)return true
}

func applicationWillEnterForeground(_ application: UIApplication) {

    print("entering foreground...")
}

func applicationDidEnterBackground(_ application: UIApplication) {
    print("entered background...")

    print(centralManager.state)
    centralManager = CBCentralManager(delegate: self, queue: nil, options: nil)
}


func centralManagerDidUpdateState(_ central: CBCentralManager) {
    if central.state == .poweredOn {
        print("Bluetooth is On")
        centralManager.scanForPeripherals(withServices: nil, options: nil)
    } else {
        print(central.state)
    }
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {

    print("\nName   : \(peripheral.name ?? "(No name)")")
    print("RSSI   : \(RSSI)")

    let name = peripheral.name ?? ""
    if name.contains("ETGuardian") {

        let DetailData = advertisementData["kCBAdvDataManufacturerData"]
        let DiscoveredData = String(describing: DetailData)

        print(DiscoveredData)

        for ad in advertisementData {
            print("AD Data: \(ad)")
        }
    }

  }
}

請幫助我像前台一樣在背景狀態下掃描應用程序。

來自文檔: 鏈接

指定了藍牙中心背景模式的應用程序可以在后台掃描。 也就是說,它們必須通過在serviceUUIDs參數中指定它們來顯式掃描一個或多個服務。 在后台掃描時,將忽略CBCentralManager掃描選項。

為了使后台掃描正常工作,您需要指定serviceUUID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM