android ble-Verbindung langsam
Hallo, ich Schreibe eine Android-app, eine Verbindung zu einem BLE-Peripheriegerät. Android 4.4.2, Galaxy Nexus.
Habe ich eine LED auf dem Gerät zur Anzeige von Verbindung Stand.
Das Problem ist die Dauer von connectGatt() Aufruf an den Punkt der empfangenden onConnectionStateChange STATE_CONNECTED
sind also inkonsistent. Einige Zeit ist es sehr schnell, aber die meisten der Zeit, die es dauert, 5 oder mehr. Drehen Bluetooth ein - /ausschalten hat keinen Einfluss.
Versuchte ich TI BTool am PC mit der TI BLE - Dongle und es ist immer stellt die Verbindung sehr schnell.
Ich habe auch versucht mit einem iPhone 5S und es ist auch schnell.
- Jeder einen hat, kennt dieses Problem auch?
- Gibt es irgendeine chance können wir verbessern?
- OK, ich fand die Ursache, denke ich, dass ich missbraucht die APIs: Vorher rufe ich connectGatt mit dem 2. Parameter = true connectGatt(context, true, gattCallback); Aber nun ich es zu ändern connectGatt(Kontext, false, gattCallback); Und den Verbindungsaufbau erheblich verbessert
- ich bereits connectGatt(Kontext, false, gattCallback), aber immer noch unter 4-5 zweite Verbindung mit ble-Gerät
Du musst angemeldet sein, um einen Kommentar abzugeben.
Übergeben Sie true, um connectGatt() autoconnect argument fordert eine hintergrund-Verbindung, indem es falsche Anfragen eine direkte Verbindung. BluetoothGatt#connect () - immer, fordert eine hintergrund-Verbindung.
Hintergrund-Verbindung (nach Bluedroid Quellen von 4.4.2 AOSP) hat scan-Intervall von 1280ms und ein Fenster von 11,25 ms. Dies entspricht rund 0,9% duty-cycle, das erklärt, warum verbindungen, wenn nicht gescannt wird, kann eine lange Zeit dauern, um abzuschließen.
Direkte Verbindung hat-Intervall von 60ms und Fenster von 30ms, also verbindungen abgeschlossen viel schneller. Außerdem kann es nur eine direkte Verbindung Anforderung noch an eine Zeit, und es Timeout nach 30 Sekunden. onConnectionStateChange() aufgerufen wird mit Status=2 status=133 um anzuzeigen, dass dieser timeout.
Ich haben überprüft, dass dieses Verhalten auf dem nexus5 aber natürlich YMMV.
Sollte ich noch erwähnen, dass es eine race-condition in BluetoothGatt.java dass kann dazu führen, eine direkte Verbindung verlangen, auch wenn autoconnect=true übergeben wird in BluetoothDevice#connectGatt().
Habe ich experimentierte langsame Verbindung aber nur beim Versuch, Sie das remote-Gerät anschließen Gerät beim ersten mal wird kein problem sein, aber wiederherstellen der Verbindung bleibt die Verbindung in die onClientRegistered () - Methode