11

Ich habe ernsthafte Probleme mit Android 6.0 und einige Geräte mit Bluetooth Low Energy. Eines dieser Geräte gegensätzlich ist dieser:Android 6.0 Marshmallow BLE Konnektivität Probleme

DEVICE INFO: 
Name:   Samsung Galaxy SV 
Model number: SM-G900V 
Android vers: 6.0.1 
Patch level: May 1, 2016 
Hard. vers: G900V.05 

Wenn ich etwas Stresstest basierend auf Verbinden und Trennen die App zu einer BLE Peripherie der Erfolgsquote mache knapp 50% erreicht.

mit der aktuellen Dokumentation von Android Lese, empfehlen sie den Transportmodus in dem letzten Parameter von connectGatt Methode angeben BLE Transport Verbindung zu erzwingen statt BR/EDR:

device.connectGatt(this, false, mGattCallback, BluetoothDevice.TRANSPORT_LE); 

nichts mit dieser Verbesserung geändert.

Nach einigen suggestions und auch über BLE-Konnektivitätsprobleme lesen, habe ich mehrere verwandte Probleme mit Samsung Galaxy S6 gefunden und in one of those schlug sie eine Reihe von Schritten vor, um BLE-Verbindungsprobleme zu beheben. Der Schlüssel war zu clear Bluetooth Share system app Daten. Auf diese Weise stieg die Konnektivitätsrate in fast 100% des Erfolgs sofort. Wenn Sie jedoch warten und mit anderen BLE-Apps spielen und eine Verbindung zu anderen Peripheriegeräten herstellen, wird das Problem früher oder später auftreten.

Es gibt some apps in Google Play, die diese BLE Probleme zu beheben versucht, und was sie im Grunde tun ist:

/system/bin/rm -r /data/misc/bluetoothd/* 
/system/bin/rm -r /data/misc/hcid/* 

Obwohl es ein Weg ist, Bluetooth-Cache zu löschen, erfordert es das Gerät verankert werden, das ist Keine vernünftige Lösung für professionelle Apps.

Keines der von mir recherchierten privaten Android-APIs half mir, dieses Problem zu lösen, und das einzige, das ich fand, war enforce service discovery cache cleanup, das nichts mit dem Problem zu tun hat.

ein BLE Paketsauganleger Verwendung ich sehe, dass die ADV_CONNECT_REQ nicht einmal von der Vorrichtung an das Peripheriegerät gesendet wird, und nach einer Weile der Android Stapel lösen das Ereignis in STATE_DISCONNECTEDBluetoothGattCallback.

Ich weiß nicht genau, warum dieses Problem in einigen 6.0-Geräten und nicht in anderen auftritt, seit Bluetooth Share-Cache scheint das Problem zu sein. Was ist dort genau gespeichert? Nur zuvor verbundene/gepaarte Geräte? Bin ich der Einzige, der dieses Problem erlebt? Wenn nicht, wie geht ihr das an? Ich würde es hassen, den Endanwendern beizubringen, wie sie Bluetooth App-Daten freigeben können.

+0

diese Kante auf S6 geprüft und können bestätigen, Bluetooth Teilen Cache zu löschen und Daten dazu beigetragen, dass ohne die Notwendigkeit, eine Verbindung BluetoothDevice.TRANSPORT_LE Parameter zu übergeben. Ich bin verloren, warum das auch passiert. Vor dem Löschen des Cache wurde keine Verbindung hergestellt. –

+0

Es ist gut, yo wissen, ich bin nicht der einzige. Danke für das Feedback @ CanCanbek, hoffe jemand kann uns helfen. – GoRoS

+0

Ich lese den Inhalt der oben genannten, ich verstehe die allgemeine Idee der Sie meinen, in der 6.0-System auf S6 Edge, nach der Implementierung der connectGatt() -Funktion, Executive zum Cache-Betrieb, kann die normalen Telefone und Kommunikation zu gewährleisten Ausrüstung, es wird keine Verzögerung geben. Ist das, was es bedeutet @Can Canbek – amibition

Antwort

0

Es gibt eine versteckte Methode namens "removeBond". Manchmal können ble-Geräte nicht eindeutig getrennt werden, in diesem Fall müssen Sie remove bond aufrufen.

Codes von here

//remove authrization 
    Method method = null; 
    try { 
     method = gatt.getDevice().getClass().getMethod("removeBond", (Class[]) null); 
     method.invoke(gatt.getDevice(), (Object[]) null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }   
    gatt.disconnect(); 

Zusätzlich können Sie gatt Dienste unter Verwendung von Hidden-Methode "refresh" aufzufrischen. Die ursprüngliche Aktualisierungsmethode bezieht sich auf gat-Dienste für Updates, aber in einigen Fällen mit unerwünschter Trennung müssen Sie möglicherweise aktualisieren, um Ihren gatt-Dienst korrekt zu verbinden.

How to programmatically force bluetooth low energy service discovery on Android without using cache