Android deja de encontrar dispositivos BLE: onClientRegistered () - status = 133 clientIf = 0

Estoy desarrollando una aplicación en la que puedo encontrar y configurar dispositivos BLE. Estoy usando la API BLE de Android estándar, pero recientemente he encontrado algunos problemas extraños.

Cuando enciendo mi aplicación, el escaneo BLE funciona bien. Estoy escaneando usando:

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

y

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

En Logcat recibo los siguientes mensajes (supongo que esto es importante para este problema):

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

En mi aplicación también puedo leer ciertas características de mis dispositivos BLE (por ejemplo, estado de la batería). Me conecto a un dispositivo para leer esta característica en un fragmento separado usando:

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

Las características se leen correctamente. En elonCharacteristicRead devolución de llamada también desconecto y cierro Gatt:

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

Cada vez que abro un fragmento para leer una característica (no importa si es el mismo dispositivo o no)clientIf el valor aumenta Puedo ver en el LogCat:

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

Todo funciona bien hasta queclientIf el valor es igual a 10. El escaneo BLE deja de encontrar dispositivos, no puedo conectarme a ninguno de mis dispositivos para leer ninguna característica, etc. Y LogCat muestra estos mensajes infinitamente:

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

La única forma de solucionarlo es cerrar la aplicación y reiniciarla o reiniciar Bluetooth apagándola y encendiéndola manualmente. He encontrado este problema solo en ciertos dispositivos como Xperia Z1 (Android KitKat) y Galaxy S4 (Android Lollipop). No pude reproducir este problema en Xperia Z3 Compact con Android Marshmallow ...

¿Hay algo que pueda hacer al respecto? Ya he intentado múltiples "soluciones" como: llamar a todos los métodos BLE desde el hilo de la interfaz de usuario y cerrar / desconectar GATT, pero nada ayuda. ¿Cómo puedo arreglarlo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta