Android findet keine BLE-Geräte mehr: onClientRegistered () - status = 133 clientIf = 0

Ich entwickle eine App, in der ich BLE-Geräte finden und konfigurieren kann. Ich verwende die Standard-Android-BLE-API, bin aber kürzlich auf einige seltsame Probleme gestoßen.

Wenn ich meine App einschalte, funktioniert der BLE-Scan in Ordnung. Ich scanne mit:

mBluetoothAdapter.startLeScan(mLeScanCallback); // for Kitkat and below

un

mBluetoothAdapter.getBluetoothLeScanner().startScan(mScanCallback); // for Lollipop and above

In der Logcat erhalte ich folgende Meldungen (ich denke, das ist für dieses Problem wichtig):

D/BluetoothAdapter: onClientRegistered() - status=0 clientIf=5

In meiner App kann ich auch bestimmte Eigenschaften von meinen BLE-Geräten lesen (z. B. Batteriestatus). Ich verbinde mich mit einem Gerät, um dieses Merkmal in einem separaten Fragment zu lese

mBluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
mBluetoothDevice = mBluetoothAdapter.getRemoteDevice(mMacAddress);
mBluetoothGatt = mBluetoothDevice.connectGatt(mContext, false, mGattCallback);

Die Merkmale werden korrekt gelesen. In demonCharacteristicRead Rückruf Ich trenne auch und schließe Gatt:

mBluetoothGatt.disconnect();
mBluetoothGatt.close();

Jedes Mal öffne ich ein Fragment, um ein Merkmal zu lesen (egal ob es sich um dasselbe Gerät handelt oder nicht)clientIf Wert erhöht sich. Ich kann im LogCat sehen:

D/BluetoothGatt: onClientRegistered() - status=0 clientIf=6
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=7
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=8
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=9
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=10

lles funktioniert gut, bis dasclientIfer Wert @ entspricht 10. Der BLE-Scan findet keine Geräte mehr. Ich kann keine Verbindung zu einem meiner Geräte herstellen, um Merkmale usw. zu lesen. Der LogCat zeigt die folgenden Meldungen unendlich an:

D/BluetoothGatt: unregisterApp() - mClientIf=0
D/BluetoothGatt: onClientRegistered() - status=133 clientIf=0

Die einzige Möglichkeit, das Problem zu beheben, besteht darin, die App zu beenden und neu zu starten oder Bluetooth neu zu starten, indem Sie sie manuell aus- und einschalten. Ich habe dieses Problem nur auf bestimmten Geräten wie dem Xperia Z1 (Android KitKat) und dem Galaxy S4 (Android Lollipop) festgestellt. Ich konnte dieses Problem auf Xperia Z3 Compact mit Android Marshmallow nicht reproduzieren ...

ann ich etwas dagegen tun? Ich habe bereits mehrere "Lösungen" ausprobiert, wie z. B. - Aufrufen aller BLE-Methoden vom UI-Thread und Schließen / Trennen von GATT, aber nichts hilft. Wie kann ich es reparieren

Antworten auf die Frage(4)

Ihre Antwort auf die Frage