SwiftUI - Выберите конкретную c службу при сканировании устройства в Bluetooth - PullRequest
0 голосов
/ 02 мая 2020

Выберите конкретную c услугу при сканировании устройства.

. Я сделал программу, в которой хочу сканировать устройство с указанной c услугой (мое устройство представляет собой термометр "SHT31" и эта служба работает от батареи "UUID: 180F"), но когда я запускаю эту программу на моем iPhone, она не сканирует устройство. Принимая во внимание, что «withServices: nil» сканирует устройство. У вас есть решение?

Мой код:

import CoreBluetooth

 class BLEConnection: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
    var centralManager: CBCentralManager!
    var myPeripheral: CBPeripheral!
    let batteryServiceCBUUID = CBUUID(string: "0x180F")

    func startCentralManager() {
        self.centralManager = CBCentralManager(delegate: self, queue: nil)
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch (central.state) {
           case .unsupported:
            print("BLE is Unsupported")
            break
           case .unauthorized:
            print("BLE is Unauthorized")
            break
           case .unknown:
            print("BLE is Unknown")
            break
           case .resetting:
            print("BLE is Resetting")
            break
           case .poweredOff:
            print("BLE is Powered Off")
            break
           case .poweredOn:
            print("BLE powered on")
            central.scanForPeripherals(withServices: [batteryServiceCBUUID], options: nil)
            break
        @unknown default:
            break
        }
    }

    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        if let pname = peripheral.name {
//            print(pname)

            if pname == "Smart Humigadget" {
                self.centralManager.stopScan()
                self.myPeripheral = peripheral
                self.myPeripheral.delegate = self
                self.centralManager.connect(peripheral, options: nil)
                print("\(pname) is connected")
            }
        }
    }
    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        self.myPeripheral.delegate = self
        self.myPeripheral.discoverServices(nil)
    }
}

1 Ответ

1 голос
/ 03 мая 2020

Используйте следующий формат (без шестнадцатеричного префикса)

    let batteryServiceCBUUID = CBUUID(string: "180F")
...