Я немного знаком с 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.