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?