46 votes

La communication entre iOS et Android avec Bluetooth LE

J'ai une application développée à l'aide de CoreBluetooth pour communiquer entre un iPad (centrale) et iPhone (périphérique). J'ai un service qui a deux caractéristiques. J'ai une Nexus 7 en cours d'exécution la plus récente d'Android 4.3 avec BTLE de soutien. Android est un peu tard pour sauter sur la BTLE train en marche, mais il semble qu'ils approchent d'elle, de la même manière iOS fait, d'où d'abord ils prennent uniquement en charge agissant comme un central à la périphérie de la mode à venir dans une version ultérieure. Je peux charger l'échantillon Android BTLE application et accédez à proximité des périphériques. Avec mon iPhone la publicité comme un périphérique je peux voir la valeur de CBAdvertisementDataLocalNameKey dans la liste des périphériques à proximité sur le côté Android. Je peux me connecter à l'iPhone et le symbole Bluetooth passe du gris clair au noir quand la connexion est faite. La connexion dure toujours exactement 10 secondes puis se déconnecte. Sur Android, je suis censé voir une liste des services disponibles et des caractéristiques apparaissent immédiatement lors de la connexion. J'ai prouvé le code Android est réglé correctement, parce que je peux connnect à la TI CC2541DK-CAPTEUR de matériel que j'ai et de tous les services et les caractéristiques sont inscrites sur se connecter à elle.

J'ai passé les derniers jours de résoudre le problème, sans succès. Le problème est que je ne peut pas déterminer le périphérique a rencontré une erreur et ainsi à l'origine de la déconnexion. Il n'y a pas de rappels de CBPeripheralManagerDelegate au cours de la phase de connexion ou de services phase de découverte, donc je n'ai aucune idée à quel point une erreur se produit (si l'erreur est sur l'iOS côté). Sur le côté Android, une méthode est appelée pour initier la découverte de service, toutefois, leur rappel "onServicesDiscovered" n'est jamais appelé, ce qui laisse perplexe. Est-il possible que je peux creuser dans les entrailles de la BTLE de la communication sur l'iOS côté pour voir ce qu'il se passe et de déterminer ce que l'erreur est de prendre la place?

29voto

edoardotognoni Points 863

J'ai déjà vécu cela pour au moins une semaine à avoir ce même problème. J'ai déjà posé une question ici, et j'ai déjà répondu sur mon propre. Le principal problème est un Android BUG problème. C'est l'envoi d'un non autorisée de commande sur un fixe L2CAP canal.

Mais quand Android est en communication avec la normale périphérique BLE appareils, cela fonctionne assez bien. Enfait le BLE sampple fonctionne comme un charme. Le problème, c'est quand est comunicating avec un appareil iOS par exemple: Juste après la connexion est faite, ils commencent à la négociation des paramètres de connexion (cette phase ne se produit pas avec la normale BLe périphérique), et c'est quand le problème se présente. Android envoie une mauvaise commande pour iOS, iOS supprime la connexion. C'est fondamentalement la façon dont il fonctionne

Certains problèmes ont déjà été signalée chez Google, et l'un d'entre eux ont déjà été acceptés et j'espère qu'ils vont commencer à travailler bientôt.

Malheureusement, ce que vous pouvez faire est d'attendre jusqu'à la prochaine version Android. De toute façon, je vous suggère fortement d'avoir un coup d'oeil à ma question en rapport avec tous mes documents de test si vous voulez faire un peu de lumière sur ce problème.

Voici le lien: https://code.google.com/p/android/issues/detail?id=58725

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X