Когда вы создаете объект BluetoothGatt
, вызывая connectGatt
для BluetoothDevice
, вы запрашиваете один из 32 (в текущей версии Android) доступных стеков в стеке Bluetooth.
Вкл. Этот объект теперь можно вызывать connect
и disconnect
, чтобы изменить состояние «цели», если Android должен попытаться сохранить соединение с устройством или нет. Пока вы не наберете disconnect
, Android будет (навсегда) пытаться подключиться к устройству и автоматически переподключиться к устройству, если соединение по какой-либо причине оборвется. Повторный вызов connect
после disconnect
заставит его попытаться подключиться снова.
Примечание: установка autoConnect
в false
при первоначальном вызове connectGatt
установит начальное время ожидания для первого неявного подключения попытка (обычно 30 секунд), и если устройство подключается, а затем соединение обрывается, оно не будет автоматически пытаться повторно подключиться.
Таким образом, объект BluetoothGatt
может находиться в состоянии «отключено», но все равно принимать до одного из 32 слотов в стеке Bluetooth. Когда вы вызываете close
, вы освобождаете все ресурсы для объекта BluetoothGatt
и возвращаете слот в стек Bluetooth. Поэтому закрытие неявно также означает разъединение. Чтобы потенциально обойти некоторые неисправные устройства Android, вы можете вызвать disconnect
для объекта BluetoothGatt
до close
. Обратите внимание, что после вызова close
вы не можете вызывать другие методы для этого объекта BluetoothGatt
.
Примечание: отключение Bluetooth означает автоматическое уничтожение всех BluetoothGatt
объектов.
Возвращаясь к вашему вопросу, я не совсем понимаю, какое отношение имеет ваше BLE-сканирование к подключению / отключению / закрытию. Сканирование полностью отделено от подключений и BluetoothGatt
объектов, и нет проблем с подключением и выполнением сканирования одновременно. Чтобы остановить сканирование, позвоните stopScan
на BluetoothLeScanner
.