Kommunizieren zwischen iOS und Android mit Bluetooth LE
Ich habe eine funktionierende app mit CoreBluetooth für die Kommunikation zwischen einem iPad (Mitte) und iPhone (Peripherie). Ich habe einen Dienst, der hat zwei Eigenschaften. Ich habe ein Nexus 7 mit der neuesten Android 4.3 mit BTLE support. Android ist ein bisschen spät, um zu springen auf die BTLE Zug, aber es scheint, Sie nähern es ähnlich wie iOS haben, wo Sie zunächst nur unterstützen, als eine der zentralen mit den peripheren Modus kommt in einer späteren version. Ich kann laden Sie die Beispiel-Android-app BTLE und suchen in der Nähe von Peripheriegeräten. Mit meinem iPhone Werbung als peripheres ich kann sehen, dass der Wert von CBAdvertisementDataLocalNameKey in der Liste der nahe gelegenen Peripherie auf der Android-Seite. Ich kann eine Verbindung zu dem iPhone und dem Bluetooth-symbol ändert sich von hellgrau zu schwarz, wenn die Verbindung hergestellt wird. Die Verbindung dauert immer genau 10 Sekunden und trennt anschließend die Verbindung. Auf der Android Seite bin ich eigentlich, um eine Liste der verfügbaren Dienste und die Eigenschaften erscheinen sofort nach Anschluss. Ich habe bewiesen, der Android code ist richtig eingestellt, denn ich kann connnect es die TI CC2541DK-SENSOR-hardware, die ich habe und alle Leistungen und Merkmale aufgeführt sind, auf die Verbindung zu es.
Ich habe in den letzten paar Tagen das Problem Problembehandlung ohne Erfolg. Das problem ist ich kann nicht bestimmen, welches Gerät ist ein Fehler aufgetreten, und so verursacht die Trennung. Es gibt keine Rückrufe von CBPeripheralManagerDelegate während der phase der Verbindung oder service-discovery-phase, also habe ich keine Idee, an welcher Stelle ein Fehler Auftritt (wenn der Fehler auf der iOS-Seite). Auf der Android-Seite eine Methode aufgerufen wird, zu initiieren, service discovery jedoch Ihre callback "onServicesDiscovered" wird nie aufgerufen, die verwirrend ist. Gibt es eine Möglichkeit, ich kann das Graben in den Eingeweiden der BTLE Kommunikation auf dem iOS-Seite, um zu sehen, was Los ist, und bestimmen, welche Fehler stattfindet?
InformationsquelleAutor der Frage afrederick | 2013-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich schon besucht-durch dieses für mindestens eine Woche mit diesem Problem. Ich habe schon eine Frage gestellt hier und ich hab schon geantwortet auf meine eigenen. Das Hauptproblem ist ein Android-BUG-Problem. Es sendet einen nicht erlaubten Befehl auf einen festen L2CAP-channnel.
Aber bei Android ist die Kommunikation mit normalen peripheren BLE-Geräte, es funktioniert ziemlich gut. In der Tat, die BLE Beispiel funktioniert wie ein Charme. Das problem ist, wenn comunicating mit einem iOS-Gerät Beispiel: nachdem die Verbindung hergestellt ist, beginnen die Verhandlungen über einen Verbindungs-Parameter (diese phase geht auch nicht mit normalen BLE-Peripheriegerät), und dies ist, wenn das problem kommt. Android sendet einen Befehl an iOS, iOS löscht die Verbindung. Das ist im Grunde, wie es funktioniert
Einige Probleme wurden bereits an Google gemeldet, und einer von Ihnen wurde bereits akzeptiert-und ich hoffe, dass Sie mit der Arbeit beginnen bald.
Leider, was Sie tun können, ist zu warten, bis die nächste Android-release. Wie auch immer, ich sehr empfehlen Sie, um einen Blick auf meinen Problembericht mit allen meinen test-Dokumenten, wenn Sie möchten, um etwas Licht auf dieses problem.
Hier der link: https://code.google.com/p/android/issues/detail?id=58725
InformationsquelleAutor der Antwort edoardotognoni
Habe ich geschrieben ein einfaches Beispiel arbeiten, die auch relativ einfach, und es open-source auf Github: https://github.com/GitGarage. Es wurde bisher nur getestet mit einem Android Nexus 9 und ein iPhone 5s, aber ich vermute, es würde auch funktionieren mit einem Nexus 6 und verschiedenen iPhone-Typen. So weit, dass es explizit für die Kommunikation zwischen einem Android-und einem iPhone, aber ich vermute, es ist tweakable, viel mehr zu tun.
Hier sind die wichtigsten Methoden...
DROID SEITE - Senden an iOS:
DROID SEITE - Empfang von iOS:
iOS-SEITE - Senden, um Android:
iOS-SEITE - Empfangen von Android:
InformationsquelleAutor der Antwort oMiKeY
Ich mache etwas ähnliches mit einem Android-Mittel-und einem iOS-Peripherie. Ich fand, dass Sie sich trennen würde, wenn nichts abonniert haben des peripheren Dienstleistungen.
Vergessen Sie nicht, aktualisieren Sie die Sicherheitsbeschreibung bei der Anmeldung sonst nicht wirklich etwas tun (d.h. Aufruf der delegate-Methode auf der iOS-Seite).
Es ist vielleicht auch der Hinweis, dass ich nicht einmal sehen konnte das iOS-Gerät tun, ein normal-BLE-scan auf dem Android-Gerät (startLeScan), aber ein BT Classic-scan mit einem broadcast-Empfänger das problem gelöst (startDiscovery).
InformationsquelleAutor der Antwort Charlie Scott-Skinner
Ich möchte hinzufügen, einige Informationen zu diesem Thema, da ein Teil unserer RnD auf BLE Thema zwischen cross-Plattform.
Peripheren Modus funktioniert ohne Probleme mit Xiomi Mi A1 (OS-version Oreo, Android 8.0).
Hier sind einige Beobachtungen auf den Durchsatz, die wir gefunden während unseres RnD auf dem iPhone 8 und Xiomi Mi A1, aber es hat immer noch zu bekommen, reifte bei anderen custom-Android-OS in der neuesten Samsung S8. Die nachstehenden Daten basieren auf write_with_response.
iPhone 8 (BLE 5.0) als Mittel-und Linux-desktop (Ubuntu 16.04 mit BLE-dongle 4.0): MTU = 2048 : Durchsatz Von 2,5 Kilobyte pro sec.
iPhone 8 (BLE 5.0) als Mittel-und Android-OS mit BLE-version 4.2 als Periphere(Xiomi Mi A1): MTU = 180 : Durchsatz Von 2,5 Kilobyte pro sec.
iPhone 8 (BLE 5.0) als Mittel-und iPhone 7 plus (BLE 4.2) Peripherie : MTU = 512 : Durchsatz - 7.1 Kb pro Sek.
iPhone 8 (BLE 5.0) als zentrale und Samsung S8 (BLE 5.0) Peripherie : Samsung S8 funktionierte nicht als periphere
iPhone 8 (BLE 5.0) als Mittel-und iPhone 8 plus (BLE 5.0) Peripherie : MTU = 512 : Durchsatz - 15.5 Kb pro Sek.
InformationsquelleAutor der Antwort Sudhin Philip
Ich wollte nur meine Erfahrungen teilen, da ich behandelte es vor einiger Zeit und ich beenden, da es keine Unterstützung von google. Den oben genannten code, was ich danke sehr, funktioniert nicht. Sie können code in einer angemessenen Zeit ein iOS zu iOS oder von android zu android bluetooth-le-Anwendung nutzen, aber das problem kommt, wenn Sie versuchen, die Kommunikation zwischen iOS und android. Es ist eine gut dokumentierte Fehler bei 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) arbeitete ich aber google nicht aussprechen, und es scheint, dass Sie geschlossen das Problem und nichts hat sich geändert in android M als Ive wurde auf der Suche in den code und kann nicht sehen, keine weiteren Unterschiede. Das problem kommt, wenn Android versucht, sich zu verbinden und gezielt in eine "wenn-sonst" - Satz; dieser code im Grunde lehnt die übertragung und schneidet die Kommunikation, so dass es nicht funktioniert. Im moment gibt es keine Lösung für, die. Sie können eine WiFi-direct-Lösung, aber es ist eine Einschränkung und es gibt weitere Probleme damit. Das problem nicht existieren, wenn du es implementieren wollen, die BLE, die mit externer hardware (raspberry, sensoren, etc.,) aber es funktioniert nicht zwischen iOS und android. Die Technik ist ziemlich die gleiche in beiden Plattformen ist das aber nicht gut umgesetzt in Android oder ist Zweck eingefügt Falle von google nicht öffnen Sie das Gespenst, um die Kommunikation zwischen beiden Plattformen.
InformationsquelleAutor der Antwort AlfuryDB
Vielleicht ein bisschen verspätet, aber vielleicht werden Ihre Schmerzen gelindert werden können leicht 😉
Wir haben experimentiert viel mit cross-Plattform-BLE-verbindungen (iOS<-> Android) und habe gelernt, dass es immer noch zu viele Inkompatibilitäten und Problemen.
Wenn Ihr Anwendungsfall ist feature driven und Sie brauchen nur grundlegende Daten-Austausch würde ich empfehlen, zu schauen, Frameworks und Bibliotheken, die erreichen können, die cross-Plattform-Kommunikation für Sie, ohne Sie benötigen, um zu bauen es von Grund auf neu.
Beispiel: http://p2pkit.io oder google in der Nähe
Disclaimer: ich arbeite für Uepaa, die Entwicklung p2pkit.io für Android und iOS.
InformationsquelleAutor der Antwort p2pkit