0

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:

  1. App fonctionne bien avec le dispositif BT
  2. batterie de l'appareil BT meurt, se déconnecte de l'application
  3. BT batterie de l'appareil chargé, tente de se reconnecter
  4. L'appareil BT se connecte au système d'exploitation (les paramètres BT d'Apple indiquent que l'appareil est connecté)
  5. L'application découvre toutes les caractéristiques CBC et les caractéristiques 'isNotifying p ROPRIÉTÉ est faux
  6. App exécute setNotifyValue true sur les caractéristiques requises
  7. Problème: Cette fonction est jamais appelée: func périphérique (_ périphérique: CBPeripheral, caractéristique didUpdateValueFor: CBCharacteristic, erreur: erreur)
  8. 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
+0

Comment initier la connexion dans votre code IOS lorsque la connexion est perdue? Vous devriez simplement appeler 'périphérique.connect() 'in' didDisconnect' – Paulw11

+1

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é –

Répondre

0

Si votre appareil BLE se déconnectent alors vous devez appeler cette fonction

[centralObj connectPeripheral:peripheral options:nil]; 

dans didDisconnectPeripheral dans déléguer des méthodes. Vous n'avez pas besoin d'appeler scanForPeripheralsWithServices à chaque fois.