Сканирование определенного устройства с использованием сохраненных служб
У меня есть приложение, которое предоставляет парную кнопку. При нажатии кнопки приложение сканирует некоторые устройства с определенным именем и показывает их в виде таблицы. Ниже scan
функция:
func scan() {
let bonding = userDefaults.bool(forKey: UserDefaultsKey.BONDING)
if bonding {
let serviceCount = userDefaults.integer(forKey: UserDefaultsKey.SERVICE_COUNT)
var cbuuids = [CBUUID]()
for i in 0..<serviceCount {
if let serviceString = userDefaults.string(forKey: "SERVICE\(i)") {
print("[BLEManager] SERVICE\(i): \(serviceString)")
cbuuids.append(CBUUID(string: serviceString))
}
}
centralManager.scanForPeripherals(withServices: temp, options: nil)
} else {
centralManager.scanForPeripherals(withServices: nil, options: nil)
}
}
Когда выбранное устройство выбрано, приложение подключится к нему и сохранит свои сервисы, используя UserDefaults:
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
guard error == nil else{
print("ERROR: \(#file, #function)")
return
}
var index = 0
for service in peripheral.services!{
connectPeripheral.discoverCharacteristics(nil, for: service)
userDefaults.set(service.uuid.uuidString, forKey: "SERVICE\(index)")
index = index + 1
}
userDefaults.set(index, forKey: UserDefaultsKey.SERVICE_COUNT)
userDefaults.set(true, forKey: UserDefaultsKey.BONDING)
}
Все работает отлично в первый раз, когда все вещи UserDeaults еще не существуют. Но после того, как я отключил и перезапустил свое приложение и снова нажал ту же парную кнопку, что заставило мой CentralManager сканировать периферийные устройства с ранее сохраненными службами, ничего не происходит. Я ожидал, что подключенное ранее устройство должно отображаться в виде таблицы. Означает ли это, что я не могу подключиться к конкретному устройству таким способом?
1 ответ
Я думаю, что вы хотите передать "var cbuuids" (ваши ранее отсканированные UUID) на scanForPeripherals.
centralManager.scanForPeripherals(withServices: cbuuids, options: nil)
Вы в настоящее время передаете "Temp". Я думаю, что это не правильный UUID.