У меня возникла проблема при работе с несколькими устройствами, подключенными через BT LE (Bluetooth с низким энергопотреблением).
Рабочий процесс выглядит следующим образом:
Шаг обработки: 1. Просканируйте все устройства Bluetooth, чтобы получить адрес.
BluetoothAdapter btAdapter = ((BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter();
BluetoothLeScanner bluetoothLeScanner = mBtAdapter.getBluetoothLeScanner();
ScanSettings settings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build();
if (btAdapter .isEnabled()) {
bluetoothLeScanner.startScan(filters, settings, mScanCallback);
}
2. Зациклить все устройства по шагу 1. Для каждого устройства:
BluetoothDevice btDevice = bluetoothAdapter.getRemoteDevice(deviceAddress);
BluetoothGatt bluetoothGatt = mBluetoothDevice.connectGatt(context, false, btCallback);
в onConnectionStateChange() из btCallBack я вызываю bluetoothGatt .discoverServices(); когда состояние соединения STATE_CONNECTED.
После обмена данными с устройством. Я звоню
bluetoothGatt.disconnect();
Thread.sleep(500);
bluetoothGatt.close();
Обработать следующее устройство
Проблема заключается в том, что когда я вызывал bluetoothGatt.disconnect() и bluetoothGatt.close(), но первое соединение Bluetooth Dongle всегда зависает, а синий светодиод Bluetooth-ключа никогда не мигает, даже если я убиваю приложение.
Только последний ключ Bluetooth может разорвать соединение после завершения работы.
Мой вопрос в том, почему я вызываю разъединение () и закрытие (), но это не работает?
build.gradle: minSdkVersion 21, targetSdkVersion 28
В противном случае эта проблема возникает только с некоторыми устройствами Android, а не со всеми устройствами. Например, он хорошо работает на устройстве Samsung (Android 7), но не работает на других устройствах.
Любая помощь будет оценена по достоинству.