Sto vedendo un bug strano in iOS 8.3 e mi chiedo se qualcun altro stia vedendo la stessa cosa.Core Bluetooth: CBPeripheral disconnette ogni ~ 10 secondi
Ho un iPad Air (in modalità Centrale) e un iPhone 6 (in modalità Periferica) molto vicino.
- mio
CBCentralManager
viene inizializzato con una coda di sfondo di serie e la possibilitàCBCentralManagerOptionRestoreIdentifierKey
- Il manager inizia la scansione per le periferiche che utilizzano il
CBCentralManagerScanOptionAllowDuplicatesKey: true
opzione - Entro
centralManager:didDiscoverPeripheral:
verifico con un elenco di periferiche che sono già scoperto:
let connect:() ->() = { peripheral.delegate = self self.devices[peripheral.identifier.UUIDString] = peripheral self.manager.connectPeripheral(peripheral, options: nil) } if let device = devices[peripheral.identifier.UUIDString] { if device.peripheral.state == .Disconnected { connect() } } else if peripheral.state == .Disconnected { connect() }
- Una volta connesso, scopro servizi e caratteristiche.
La periferica ora si disconnette dopo circa 10 secondi, viene immediatamente rilevata di nuovo e si ricollega. 10 secondi dopo questa procedura si ripete.
È un errore o sto facendo qualcosa di sbagliato qui?
Ho anche provato ad iscrivermi direttamente a una caratteristica sulla periferica, ma questo non sembrava cambiare nulla.
ho usato la mia prova app su un dispositivo iOS8.3 e io non vedo questo - entrambi con un Fitbit Flex periferica e un altro dispositivo iOS come una periferica. C'è una ragione particolare per cui stai impostando la chiave Consenti duplicati? Normalmente non è necessario e scarica la batteria. Non ho problemi a mantenere la connessione a una periferica BLE per ore. – Paulw11
Grazie Paul, sto usando la chiave duplicati per eseguire azioni basate sul RSSI. Ti connetti alla periferica una volta? Quali caratteristiche leggi/scrivi/sottoscrivi? La periferica aggiorna continuamente i valori? Penso che potrebbe avere qualcosa a che fare con quello? – desktop
Mi collego alla periferica una volta. Se si desidera ottenere il valore RSSI della periferica connessa, è possibile utilizzare il metodo 'readRSSI' CBPeripheral. Il mio codice di esempio non legge/scrive continuamente o notifica su nessuna caratteristica – Paulw11