Я разрабатываю приложение, в котором я могу найти и настроить устройства BLE. Я использую стандартный Android BLE API, но в последнее время я столкнулся с некоторыми странными проблемами.Android перестает находить устройства BLE: onClientRegistered() - status = 133 clientIf = 0
Когда я включаю свое приложение, проверка BLE работает нормально. Я сканирование с помощью:
mBluetoothAdapter.startLeScan(mLeScanCallback); // for Kitkat and below
и
mBluetoothAdapter.getBluetoothLeScanner().startScan(mScanCallback); // for Lollipop and above
В LogCat я получаю следующее сообщение (я думаю, что это важно для этого вопроса):
D/BluetoothAdapter: onClientRegistered() - status=0 clientIf=5
В моем приложении I также могут считывать определенные характеристики с моих устройств 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, но ничего не помогает. Как я могу это исправить?
у меня был подобный вопрос и для меня добавляя небольшую задержку между отключением и сканирование решена проблема тоже. Благодаря! – Tijn
Я нашел то же самое решение, что и вы. Подробности: https://github.com/googlesamples/android-BluetoothLeGatt/issues/44 –