Android перестает находить устройства BLE: onClientRegistered () - status = 133 clientIf = 0

Я занимаюсь разработкой приложения, в котором я могу найти и настроить устройства BLE. Я использую стандартный Android BLE API, но недавно я столкнулся с некоторыми странными проблемами.

Когда я включаю свое приложение, сканирование BLE работает нормально. Я сканирую, используя:

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

а также

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

В Logcat я получаю следующие сообщения (я думаю, это важно для этой проблемы):

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

В моем приложении я также могу прочитать определенные характеристики от моих устройств BLE (например, состояние батареи). Я подключаюсь к устройству, чтобы прочитать эту характеристику в отдельном фрагменте, используя:

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

Характеристики прочитаны правильно. вonCharacteristicRead обратный вызов я также отключить и закрыть Гатт:

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

Каждый раз, когда я открываю фрагмент, чтобы прочитать характеристику (независимо от того, одно устройство или нет)clientIf значение увеличивается. Я вижу в 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

Все работает нормально доclientIf значение равно 10. Сканирование BLE прекращает поиск любых устройств, я не могу подключиться ни к одному из своих устройств, чтобы прочитать какие-либо характеристики и т. д. И LogCat бесконечно отображает эти сообщения:

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

Единственный способ исправить это - убить приложение и перезапустить его или перезапустить Bluetooth, выключив и включив его вручную. Я сталкивался с этой проблемой только на некоторых устройствах, таких как Xperia Z1 (Android KitKat) и Galaxy S4 (Android Lollipop). Я не смог воспроизвести эту проблему на Xperia Z3 Compact под управлением Android Marshmallow ...

Что я могу с этим поделать? Я уже пробовал несколько «решений», таких как - вызов всех методов BLE из потока пользовательского интерфейса и закрытие / отключение GATT, но ничего не помогает. Как я могу это исправить?

Ответы на вопрос(2)

Ваш ответ на вопрос