Android 4.3 Bluetooth Low Energy instabil
Ich bin derzeit am entwickeln einer Anwendung verwenden, die Bluetooth Low Energy (Test auf dem Nexus 4). Nachdem erste Schritte mit der offiziellen BLE APIs in Android 4.3 ist mir aufgefallen, dass nachdem ich ein Gerät anschließen für die erste Zeit bin ich selten in der Lage, erfolgreich eine Verbindung /Kommunikation mit diesem Gerät oder einem anderen Gerät wieder.
Anschluss an die Führung hierich kann erfolgreich eine Verbindung zu einem Gerät, scan-Dienstleistungen und Eigenschaften, und Lesen/schreiben/empfangen Benachrichtigungen ohne Probleme. Jedoch nach trennen und neu verbinden, ich bin oft nicht in der Lage zu Scannen Dienstleistungen/Merkmale oder nicht abschließen können Lesen/schreiben. Ich kann nichts finden in den logs angeben, warum dies geschieht.
Sobald dies geschieht, ich habe um die Anwendung zu deinstallieren, deaktivieren Sie Bluetooth und starten Sie das Telefon, bevor Sie wieder anfangen zu arbeiten.
Wenn ein Gerät getrennt wird ich sicher sein, rufen Sie close() auf der BluetoothGatt-Objekt und stellen Sie es auf null. Irgendwelche Erkenntnisse?
EDIT:
Log-dumps: dieser Protokolle ist ich mein Telefon verwurzelt und erhöhte den trace-Level des zugehörigen Elemente in der /etc/bluetooth/bt_stack.conf
Erfolgreiche Verbindung - Erster Versuch nach dem Neustart das Telefon und installieren Sie die app. Ich bin in der Lage, verbinden, entdecken Sie alle Dienstleistungen/Merkmale und Lesen/schreiben.
Gescheiterten Versuch 1 - Das ist der nächste Versuch, nach einer Trennung vom erfolgreichen Anschluss nach oben. Es scheint, ich war in der Lage zu entdecken, Eigenschaften, aber den ersten Versuch zu Lesen, ein Nullwert zurückgegeben, und getrennt, bald danach.
Gescheiterten Versuch 2 - Ein Beispiel, wo ich bin nicht einmal in der Lage zu entdecken Dienstleistungen/Merkmale.
EDIT 2:
Das Gerät, das ich versuche zu verbinden, basiert auf dem TI CC2541 chip. Ich erhielt einen TI SensorTag (auch auf der Grundlage der CC2541) zu spielen, um mit und entdeckt, dass TI veröffentlicht eine android-app für die SensorTag gestern. Allerdings hat diese app das gleiche problem. getestet habe ich diese auf zwei anderen Nexus 4s mit dem gleichen Ergebnis: die Verbindung zu dem SensorTag ist erfolgreich beim ersten oder zweiten mal, aber (laut den logs) nicht zu entdecken, services danach, wodurch alle möglichen Abstürze. Ich fange an zu Fragen wenn es ein Problem mit diesem speziellen chip?
InformationsquelleAutor der Frage sa.shadow | 2013-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wichtige Umsetzung Hinweise
(Vielleicht einige dieser Hinweise nicht mehr notwendig, aufgrund der Android OS-updates.)
android.bluetooth.BluetoothGatt#close()
onLeScan(..)
und dann auf verbinden. Grund:BluetoothDevice#connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback)
schlägt immer fehl, wenn der Aufruf innerhalbLeScanCallback() {...}.onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
im selben thread auf Samsung Galaxy S3 mit Android 4.3 (zumindest für build JSS15J.I9300XXUGMK6)android.bluetooth.BluetoothAdapter#startLeScan(UUID[] serviceUuids, LeScanCallback callback)
mit dem parameter-filter für bestimmte service-UUIDsweil dieser gebrochen ist komplett in Samsung Galaxy S3 mit Android 4.3 und funktioniert nicht für die 128-bit UUIDs im Allgemeinen.- Tutorial für Anfänger
Einen ziemlich OK Einstiegspunkt für Neulinge könnte dieses video-tutorial: die Entwicklung von Bluetooth Smart-Anwendungen für Android http://youtu.be/x1y4tEHDwk0
Das Problem und arbeiten rund um beschrieben wird, ist wahrscheinlich jetzt behoben durch OS-updates
Umgehen: ich konnte das "stabilisieren" meine app gemacht...
Diese Arbeit basiert auf folgenden Erfahrungen...
InformationsquelleAutor der Antwort OneWorld
Drehen WIFI AUS:
Kann ich bestätigen auch, dass das WIFI AUS macht Bluetooth 4.0 stabiler, vor allem auf Google-Nexus (ich habe ein Nexus 7).
Das problem
ist, dass die Anwendung, die ich entwickle muss beide WIFI und continous Bluetooth LE Scannen. So drehen Sie WIFI AUSSCHALTEN war keine option für mich.
Außerdem habe ich gemerkt, dass continous Bluetooth LE Scannen kann eigentlich töten WIFI-Verbindung und machen die WLAN-adapter nicht in der Lage zu re-connect zu jedem WIFI-Netzwerk, bis der BLE-scan AUF. (Ich bin mir nicht sicher über mobile Netzwerke und mobile internet).
Dies geschah auf folgende Geräte:
Jedoch BLE Scannen mit WIFI auf schien ziemlich stabil auf:
Mein workaround
Ich scan BLE für kurzer Zeit 3-4 Sekunden dann habe ich drehen scan-OFF für 3-4 Sekunden. Und dann wieder ein.
services
odercharacteristics
ausfällt.InformationsquelleAutor der Antwort benka
Stellen Sie sicher, dass Ihr Nexus ist mit dem Gerät gepaart. Ich kann nicht überprüfen, ob die Kommunikation korrekt arbeitet, aber Sie werden in der Lage sein, um verbinden, Sie mehr als einmal ohne einen Neustart. Es scheint die erste Verbindung ist nicht die Paarung, sondern alle nachfolgenden versuche machen.Werde ich diese Antwort in ein paar Tagen, wenn ich test-service-discovery-und gatt-lese-und Schreibanforderungen, ohne einen Neustart.
BEARBEITEN:
Es stellt sich heraus, dass ich die Prüfung auf eine Entwicklung, firmware-version (sensoren), die Probleme verursachen, wenn Sie nicht gepaart. Unsere neueste Produktion firmware-build funktioniert gut auf den 2540s und 2541s.
BEARBEITEN:
Ich habe bemerkt, dass auf dem Nexus 7 2013, die verbindungen sind stabil, wenn WiFi ausgeschaltet ist. Ich würde gerne wissen, ob dies hilft jemand anderes.
BEARBEITEN:
Scheinbar hatte ich ihn nach hinten mit der Paarung. Funktioniert alles wunderbar, wenn nicht gekoppelt. Nach der Paarung, ich bin in der exakt gleichen Symptome wie der OP. Es ist nur noch nicht bekannt, ob dies im Zusammenhang unserer firmware und /oder Android BLE-API. Seien Sie vorsichtig, wenn dieses zu testen, weil einmal verbunden, können Sie nicht in der Lage sein, um Sie auf Pairing aufheben wegen einem bug erklärt in 3b dieser post.
InformationsquelleAutor der Antwort Mikt25
In einigen Modellen gibt es einen Fehler:
https://code.google.com/p/android/issues/detail?id=180440
Auf der anderen Seite, in meinem Fall war das problem, dass meine Verbindung war nicht richtig geschlossen, in der onDestroy-Methode. Nach dem richtigen schließen, problem für mich ist nicht vorhanden, nicht wichtig, dass das WLAN an-oder ausgeschaltet ist.
InformationsquelleAutor der Antwort Krystian