Периферийные устройства iOS BLE не обнаруживаются при сканировании с использованием определенных идентификаторов обслуживания - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу сделать сканер BLE, который может работать в фоновом режиме.

Во-первых, я узнал о периферийных устройствах и их сервисных пользователях с помощью кода ниже.

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    switch central.state {
    case .poweredOn:
        central.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])
    default:
        central.stopScan()
    }
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    self.scannedPeripherals.appendAsUnique(peripheral)

    central.connect(peripheral)
}

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
    peripheral.delegate = self
    peripheral.discoverServices(nil)
}

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
    peripheral.delegate = nil
}

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    peripheral.services?.forEach {
        peripheral.discoverCharacteristics([$0.uuid], for: $0)
    }
}

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
    // I got a service uuid here!
    print(service.uuid)
}

Этот код позволяет мне делать все, что я хочу, в режиме переднего плана.

Итак, я узнал сервисные uuids, которые можно сканировать сейчас, включая 180A (Device Information), 180F (Battery Service), 1805 (Current Time Service), D0611E78-BBB4-4591-A5F8-487910AE4366 (Continuity), 9FA480E0-4967-4542-9390-D343DC5D04AE.

И я 'мы видели документы (например, фоновое сканирование для BLE в Swift ), в которых говорится, что мне нужно добавить служебные uuids вместо withServices: nil для работы в фоновом режиме, поэтому я добавил служебные uuids, которые я знаю, каккод ниже.

central.scanForPeripherals(withServices: [CBUUID(string: "180A")], options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])

central.scanForPeripherals(withServices: [CBUUID(string: "180F"), CBUUID(string: "9FA480E0-4967-4542-9390-D343DC5D04AE")])

Однако с тех пор периферийные устройства не были обнаружены.(даже в режиме переднего плана.)

Чтобы подвести итог проблемы

сканировать все => 180A служба была проверена

сканировать с 180A служба => ничего не сканируется

Что не так?: '(

пс. Спасибо, Paulw11.

...