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?
- Vous utilisez le dernier iOS, droit?
- Oui
- Vous devez acheter un BLE dongle et l'utilisation de TI est un renifleur de paquets solution: ti.com/tool/packet-sniffer Ce que vous mentionnez semble bizarre. Aussi, essayez cette application: itunes.apple.com/tr/app/ble-utility/id606210918?mt=8 Il est facile de simuler des services sur le i* appareil. Si cela réussit, alors le problème est probablement dans votre code. Si cela échoue, au plus profond de l'inspection est nécessaire.
- J'ai téléchargé le BLE app Utilitaire ainsi que LightBlue, les deux applications ont vécu les mêmes résultats que mon appli personnalisée. J'ai trouvé un autre fil qui relie ici: code.google.com/p/android/issues/..., Il semble que ce pourrait être un faible niveau de mise en œuvre de bug sur le côté Android, mais il doit encore être confirmé.
- C'est très probable. Ils ont déployé tout à l'heure et a commencé à partir de rien. Il ya certainement des questions. Malheureusement, Google semble plus ou moins ignorer BLE. Ils n'ont même pas passer beaucoup de temps à Java-izing l'API. Tenir ce post à jour. Je pense que vous allez envoyer la réponse bientôt. 🙂
- Va faire! Il vous aidera si les gens vont et "star" de cette question à l'code.google.com site. J'espère que cela est résolu dans la prochaine version d'Android 4.3, bien sûr, j'aimerais obtenir iOS et Android à discuter!
- Salut tout le monde. Je suis le développeur qui a signalé l'isse que @frederick liés. Je pense que allprog dit la vérité. De toute façon je vous donner les gars une mise à jour. Il y a un autre problème en rapport à PSBA page qui a été détenue par une Android guy. La question est la même d'une mine. Donc espérons qu'ils obtiennent leurs mains sur! C'est la question du lien:code.google.com/p/android/issues/detail?id=58896 Gardez un oeil sur elle!
- J'ai rencontré le même problème, le Nexus 4 sur 4.3 connexion à l'iPhone 5, agissant en tant que périphérique à l'aide de LightBlue. Peut se connecter mais la découverte de périphériques jamais finie et la débrancher. Mis à jour le Nexus 4 à 4,4 (numéro de Build KRT16S) et de la connexion et de la découverte de services. A été en mesure de lire et d'écrire des caractéristiques.
Vous devez vous connecter pour publier un commentaire.
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. En fait, le BLE exemple 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 été déjà signalé à 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
J'ai écrit un simple exemple de travail, bien que relativement simple, et open-source sur Github: https://github.com/GitGarage. Jusqu'à présent, il a seulement été testé avec un Android Nexus 9 et un iPhone 5s, mais je pense qu'il serait aussi travailler avec un Nexus 6 et divers iPhone types. Jusqu'à présent, il est mis en place expressément pour communiquer entre un Android et un iPhone, mais je présume que c'est tweakable de faire beaucoup plus.
Voici les principales méthodes...
DROID CÔTÉ - Envoyer à iOS:
DROID CÔTÉ - reçu de iOS:
iOS CÔTÉ - Envoyer à Android:
iOS CÔTÉ de la Réception à partir d'Android:
xcode 6.3.2
il ne compile pas, après la résolution des erreurs de compilation. Je lance le code, mais n'a pas pu envoyer le texte. Va essayer de résoudre le problème.Je voudrais ajouter quelques informations à ce fil, comme une partie de notre RnD sur la BLE sujet entre la croix-plate-forme.
Périphérique est en mode de travail sans aucun problème avec Xiomi Mi A1 (version de l'OS Oreo, Android 8.0).
Voici quelques observation sur le débit que nous avons constaté lors de notre RnD sur iPhone 8 et Xiomi Mi A1, mais il a encore à obtenir mûri avec d'autres personnalisée d'Android OS utilisés dans la dernière Samsung S8. Les données ci-dessous est basé sur write_with_response.
iPhone 8 (BLE 5.0) comme un élément Central et du bureau Linux (Ubuntu 16.04 avec BLE 4.0 dongle): MTU = 2048 : Débit De 2,5 kilo-octets par seconde.
iPhone 8 (BLE 5.0) comme un élément Central et système d'exploitation Android avec BLE version 4.2 en tant que Périphérique(Xiomi Mi A1): MTU = 180 : Débit De 2,5 kilo-octets par seconde.
iPhone 8 (BLE 5.0) comme un élément Central et iPhone 7 plus (BLE 4.2) comme Périphérique : MTU = 512 : Débit - 7.1 kilo-octets par seconde.
iPhone 8 (BLE 5.0) comme un élément Central et Samsung S8 (BLE 5.0) comme Périphérique : Samsung S8 ne fonctionnent pas comme périphérique
iPhone 8 (BLE 5.0) comme un élément Central et iPhone 8 plus (BLE 5.0) comme Périphérique : MTU = 512 : Débit - 15.5 kilo-octets par seconde.
Je suis en train de faire quelque chose de similaire avec un Android central et périphérique iOS. J'ai trouvé qu'ils déconnecter si rien souscrit à l'un des périphériques de services.
N'oubliez pas de mettre à jour le descripteur lors de la souscription d'autre il ne fait pas faire quoi que ce soit (c'est à dire appeler le délégué de la méthode sur l'iOS côté).
Il pourrait également être intéressant de noter que je ne pouvais même pas voir l'appareil iOS faire un normal BLE d'analyse sur l'appareil Android (startLeScan), mais à partir d'un BT Classique scan avec un récepteur de radiodiffusion résolu le problème (startDiscovery).
Je voulais juste partager mes connaissances sur ce que j'ai abordé il y a quelque temps, et j'ai quitté car il n'y est pas prise en charge par google. Le code mentionné ci-dessus, que je remercie beaucoup, ne fonctionne pas. Vous pouvez de code dans un délai raisonnable, une iOS à android ou iOS à android bluetooth le demande, mais le problème vient quand vous essayez de communiquer entre iOS et android. Il est bien documenté problème lié à google (https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=58725) j'ai collaboré, mais google n'a pas le prononcer, et il semble qu'ils ont fermé le problème et rien n'a changé dans android M que Ive été à la recherche dans le code et je vois pas d'autres différences. Le problème vient quand Android tente de se connecter, et plus précisément dans un "if else" la phrase; ce code fondamentalement rejette la transmission et de couper la communication si il ne marche pas. À l'heure actuelle, il n'existe pas de solution pour cela. Vous pouvez faire un WiFi solution directe, mais sa limitation et il y a d'autres problèmes à le faire. Le problème n'existent pas, si vous voulez mettre en œuvre BLE avec le matériel externe (framboise, capteurs, etc.) mais il ne marche pas entre iOS et android. La technologie est tout à fait le même dans les deux plates-formes, mais n'est pas bien mis en œuvre dans Android ou est inséré piège par google pour ne pas ouvrir le spectre de communiquer entre les deux plates-formes.
Peut-être un peu de retard, mais peut-être que votre douleur peut être soulagée un peu 😉
Nous avons expérimenté beaucoup de choses avec la croix-plate-forme de BLE connexions (iOS<-> Android) et il a appris qu'il existe encore de nombreuses incompatibilités et les problèmes de connexion.
Si votre cas est pilotée par une fonction et vous avez seulement besoin de base de données exchange je vous propose de regarder des Cadres et des Bibliothèques qui peuvent atteindre la croix-plate-forme de communication pour vous, sans que vous ayez à le construire à partir de zéro.
Par exemple: http://p2pkit.io ou google à proximité
Disclaimer: je travaille pour Uepaa, le développement de p2pkit.io pour Android et iOS.