Я немного знаком с BLE, и у меня возникла проблема с унаследованным кодом. Итак, приложение работает так:
- При включенном BLE приложение сканирует устройства.
- Приложение отображает найденные устройства
- Пользователь выбирает устройство для сопряжения с
- Приложение соединяется с устройством
Проблема, с которой я столкнулся, заключается в том, что после нескольких сопряжений (это может быть разным) телефон не может обнаруживать устройства, что блокирует сопряжение пользователя.
Я использую GattServer для подключения к клиентскому устройству и сбрасываю службы, как показано ниже:
public void resetBluetoothGattServer() {
Log.i(TAG," resetBluetoothGattServer: bluetoothGattServer: "+ bluetoothGattServer);
if (bluetoothGattServer != null) {
if(!bluetoothGattServer.getServices().isEmpty()){
Log.i(TAG," resetBluetoothGattServer: clearing services on bluetooth Gatt Server");
bluetoothGattServer.clearServices();
}
Log.i(TAG," resetBluetoothGattServer: closing bluetoothGattServer");
bluetoothGattServer.close();
}
bluetoothGattServer = openGattServer();
}
Перезагрузка телефона, выключение и повторное включение Bluetooth, а также удаление и установка приложения не решат проблему. Единственное решение - очистить кеш из приложения Bluetooth Share в диспетчере приложений Android.
Это сообщение Как программно принудительно включить службу Bluetooth с низким энергопотреблением обнаружение на Android без использования кеша обращается к аналогичной проблеме, но, поскольку мы не используем BluetoothGatt для подключения, это не подходящее решение. Также не будет рефакторинга всего унаследованного кода.
Я спрашиваю вас, есть ли способ программно очистить кеш с помощью BluetoothGattServer.