Соединение Bluetooth зависает на первом ключе Bluetooth (приложение для Android)

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

Любая помощь будет оценена по достоинству.


person Jimy25    schedule 18.08.2018    source источник


Ответы (1)


После многих попыток. Я исправил эту проблему, добавив время простоя между соединениями ICU.

Шаг, как показано ниже. 1. Подключиться к устройству 1 2. Передать данные 3. Отключить устройство 1 4. Thread.sleep на несколько секунд 5. Подключиться к устройству 2 ...

Надеюсь, это поможет кому-то, у кого есть проблема, как у меня.

person Jimy25    schedule 23.08.2018