Je crée une application pour un périphérique Bluetooth personnalisé. L'application se connecte/communique correctement avec l'appareil, mais certains problèmes de connexion/reconnexion étrange se produisent parfois.iOS Bluetooth connecté en fonction des paramètres, mais mon application n'a aucun périphérique connecté
Une situation de reproductible de ce problème est lorsque la batterie meurt:
- App fonctionne bien avec le dispositif BT
- batterie de l'appareil BT meurt, se déconnecte de l'application
- BT batterie de l'appareil chargé, tente de se reconnecter
- L'appareil BT se connecte au système d'exploitation (les paramètres BT d'Apple indiquent que l'appareil est connecté)
- L'application découvre toutes les caractéristiques CBC et les caractéristiques 'isNotifying p ROPRIÉTÉ est faux
- App exécute setNotifyValue true sur les caractéristiques requises
- Problème: Cette fonction est jamais appelée: func périphérique (_ périphérique: CBPeripheral, caractéristique didUpdateValueFor: CBCharacteristic, erreur: erreur)
- Problème: self.manager.retrieveConnectedPeripherals (withServices: [identificateur]) ne renvoie aucun périphérique connecté, même si les paramètres BT d'Apple indiquent que l'appareil est connecté.
Voici comment le gestionnaire à l'étape 8 est lancée:
fileprivate override init() {
super.init()
self.manager = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey : Constants.cbCentralManagerOptionRestoreIdentifierKey])
}
Question: Est-ce que quelqu'un sait ce que la cause de cela pourrait être? Ou quelle est la solution?
Clues possibles:
je dois sélectionner Oublier l'appareil deux fois d'oublier l'appareil dans Réglages BT Apple (après la première fois oublier, l'appareil est toujours connecté avec le bouton d'information affiché)
Je bluetooth fond a permis
Je reçois le message suivant dans mon débogueur:
[CoreBluetooth] XPC connection invalid
- Je suis sur Swift 3, Xcode 8
Comment initier la connexion dans votre code IOS lorsque la connexion est perdue? Vous devriez simplement appeler 'périphérique.connect() 'in' didDisconnect' – Paulw11
Pour me reconnecter, j'appelle 'self.manager.connect (périphérique, options: nil)' (où self.manager est le même que dans l'étape 8 ci-dessus) lorsque le gestionnaire central didDisconnectPeripheral est appelé –