l'iPhone ne permet pas de découvrir des Services sur un Bluetooth LE tag sur la reconnexion
Je suis en train de travailler sur un Bluetooth LE application pour iOS. Je suis l'aide de la Base Bluetooth cadre de iOS pour gérer toutes les communications.
Question & Description:
Lorsque j'utilise une balise unique, malgré de nombreuses connexions et déconnexions, la balise unique se connecte de façon transparente et le téléphone découvre services.
Aussi, lorsque plusieurs Bluetooth LE les balises de se connecter pour la première fois, ils se connecter de façon transparente et le téléphone découvre leurs services.
Lorsque les balises déconnecter puis reconnecter le téléphone, les balises se connecter très bien. Mais l'une des deux balises (un) ne semble pas faire la publicité de ses services. j'.e lorsque l'application est ouverte et que la balise se reconnecte, le DiscoverServices méthode ne fait pas appel à la didDiscoverServices délégué.
Pourquoi cela se produit uniquement lors de la connexion de plusieurs appareils.
J'ai mis le périphérique.délégué correctement. J'ai tout essayé, y compris répété re-connecter, répété DiscoverServices appels à la balise. Rien ne semble fonctionner.
Comment puis-je re-connecter à plusieurs balises pour le téléphone et encore de découvrir tous les services.
S'il vous plaît aider
Merci,
Manju
OriginalL'auteur Manju Kiran | 2012-08-17
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème mais s'est rendu compte que je n'étais pas le réglage de la
delegate
àCBPeripheral
aprèsdidConnectPeripheral
est appelé.OriginalL'auteur jhalla14
J'ai été confronté à un problème similaire avec CoreBluetooth pour se connecter à des appareils Bluetooth LE, dans mon cas, la connexion à des appareils iOS (périphériques) à partir de mon Mac (centre).
Si je reçois correctement, le modèle est tout à fait cohérente, la première fois que j'utilise mon Mac app pour le débogage, il est toujours détecté et connecté à tous les appareils bluetooth LE devices (périphériques), le plus important, il a également découvrir leur services/caractéristiques amende. Le problème commence dans la deuxième manche (par exemple, changer une partie du code, frappé cmd-R pour relancer le débogage). La centrale détecte les périphériques et les relie entre eux, mais il ne parvient pas à découvrir tous les services/caractéristiques. En d'autres termes, le délégué
peripheral:didDiscoverServices:
etperipheral:didDiscoverCharacteristicsForService:error:
jamais appelée.De la solution après beaucoup d'essais et d'erreurs, et il est étonnamment simple. Il semble que CoreBluetooth caches
services
etcharacteristics
pour les périphériques qui sont toujours connecté, même si localement on dirait qu'il a été déconnecté de l'application, le périphérique maintient toujours une connexion bluetooth pour le système. Pour ce type de connexions, il n'est pas nécessaire de (re)découvrir les services et caractéristiques, il suffit d'accéder directement à partir de la périphérie de l'objet, vérifiernil
à savoir si l'on doit découvrir. Aussi, comme mentionné, depuis le périphérique est dans un état qui est entre les connexions, il est préférable de faire appel àcancelPeripheralConnection:
droit avant de tenter de se connecter. L'essentiel comme suit, en supposant que nous avons déjà découvert le périphérique se connecte à:Cela fonctionne bien pour moi que pour un CBCentralManager dans le Mac app. Jamais testé en iOS, mais je suppose que ça doit être assez similaire.
OriginalL'auteur P.L.
S'avère qu'il y a la commande, j'ai été la délivrance de l'appareil dans le"didDiscovercharacteristicsForService" délégué méthode qui a été l'origine de la connexion de l'instabilité.
Si vous êtes confrontés à des problèmes similaires, je vous suggère de laisser le délégué méthode complète et sans aucune intervention (de toute nature) et de transmettre les CBPeripheral à une autre fonction, conçu par vous de passer toutes les valeurs de /une commande à la périphériques.
Merci quand même Wilhemsen.
Donc les étapes sont comme suit..
1> la Recherche pour le Tag,
2> Si dans la gamme, CONNECTEZ-vous à Étiquette
3>, S'il est Connecté, appeler DÉCOUVREZ les services de la méthode (ne pas interrompre)
4> DANS DidDiscoverServices, appelez la découverte des Caractéristiques de la Méthode
..
Dans DidDiscoverCharacteristics Méthode, attendre jusqu'à ce que toutes les Caractéristiques sont découverts..
Puis , à la fin, appeler une fonction dans votre code qui permettra de faire le nécessaire d'installation..
...
Exemple De Code
Hey wilhelmsen tout, ,<br> La principale solution pour le code, c'est que nous n'avons pas d'installation de nos préférences sur l'étiquette, tandis que les services et les caractéristiques sont d'être découvert. Une fois que tous les services et de ses caractéristiques sont découverts, alors nous pouvons appeler un setupPeripheral appel.. je vais ajouter mon code comme une autre réponse..
OriginalL'auteur Manju Kiran
J'ai eu le même problème. il semble se produire environ 1/3 du temps dans mon cas. J'ai essayé la solution proposée par P. L. mais je n'ai eu aucun succès sur iOS. Il y a peut-être beaucoup de pièces en mouvement à l'œuvre ici, qui peuvent contribuer à ce problème (bluetooth firmware de l'appareil, CoreBluetooth, etc.) mais je l'ai résolu par un simple suivi des dispositifs qui sont en attente de service/caractéristique de la découverte dans un NSMutableDictionary et en utilisant le PGCD de vérifier si elle avait terminé, c'est de la découverte dans un laps de temps raisonnable, et d'essayer à nouveau si nécessaire. Donc quelque chose comme ceci:
Puis, quand
peripheral:didDiscoverServices:error
appelle de nouveau je le supprime de mon pendingConnectionDevices dictionnaire. Cela semble fonctionner assez bien. Je l'ai vu essayer de découvrir des services jusqu'à 3 fois avant de réussir. J'espère que cette aide.OriginalL'auteur Grahambo
Parfois, c'est un problème matériel. J'ai juste rencontré un cas que le matériel va entrer dans un mode de veille qui est lisible, connectable, mais pas de retour d'appel à tous pour discoverServices.
Aussi il y a une situation qui m'est arrivé lors de l'élaboration de BLE toute la nuit et tout à coup, l'appareil deviennent silence pour discoverServices peu importe ce que j'ai fait. Finalement, j'ai trouvé ça deviendra normal si je reboot mon iPhone5s.
Et un jour, le matériel bluetooth ingénieur m'a dit que la spec de BLE ne dit que l'appareil doit être connectable à nouveau dans un délai de 30 secondes. Donc si je me connecter et déconnecter maintes et maintes fois, il peut ne fonctionne pas comme prévu... encore que je doute.
OriginalL'auteur Orange
J'ai essayé d'appliquer toutes les réponses ci-dessus, mais ça ne marchait pas pour moi parce que j'ai été absent
CBPeripheralDelegate
de la classe.OriginalL'auteur Maihan Nijat
Je suis en train de faire tout ce que vous dites dans votre réponse, mais je vois toujours ce problème de temps en temps. Ma conjecture est au Cœur Bluetooth pénètre dans un étrange état, probablement due à une séquence spécifique de raccordement, d'abonnement et de déconnexion.
Le seul moyen que j'ai trouvé pour résoudre le problème est de redémarrer l'appareil iOS. Ce problème peut être résolu dans iOS 7.1.
OriginalL'auteur Mark
Mon mal de tête a été causée par le manque de une forte référence au périphérique
J'ai donc ajouter la référence et le problème a disparu
OriginalL'auteur HotJard