Какой правильный флаг autoConnect в connectGatt BLE?

моя цель заключается в автоматическом подключении устройства Bluetooth Low Energy и телефона. Я последовал примеру кода, и я нашел строку

// We want to directly connect to the device, so we are setting the autoConnect parameter to false. mBluetoothGatt = device.connectGatt(this, false, mGattCallback); 

Вышеупомянутый код означает, что false используется для автосоединения. Однако я нашел API здесь , он сказал, что

BluetoothGatt connectGatt (контекст контекста, логический autoConnect, обратный вызов BluetoothGattCallback, int transport) Подключение к серверу GATT, размещенному на этом устройстве.

И я также пробовал два флага: true и false , и только true – это работа. Я использую версию> = Android 5.0. Что-то несовместимо между кодом и API? Какой флаг правильный? Нужно ли мне что-то делать, если я хочу сделать автоматическое соединение?

Это мой код

 public boolean connect(final String address) { if (mBluetoothAdapter == null || address == null) { Log.w(TAG, "BluetoothAdapter not initialized or unspecified address."); return false; } // Previously connected device. Try to reconnect. if (mBluetoothDeviceAddress != null && address.equals(mBluetoothDeviceAddress) && mBluetoothGatt != null) { Log.d(TAG, "Trying to use an existing mBluetoothGatt for connection."); if (mBluetoothGatt.connect()) { mConnectionState = STATE_CONNECTING; return true; } else { return false; } } final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); if (device == null) { Log.w(TAG, "Device not found. Unable to connect."); return false; } // We want to directly connect to the device, so we are setting the autoConnect // parameter to false. mBluetoothGatt = device.connectGatt(this, true, mGattCallback); Log.d(TAG, "Trying to create a new connection."); mBluetoothDeviceAddress = address; mConnectionState = STATE_CONNECTING; return true; } 

One Solution collect form web for “Какой правильный флаг autoConnect в connectGatt BLE?”

«Прямое соединение» противоположно «автосоединению», поэтому, если вы установите для параметра autoConnect значение false, вы получите «прямое соединение». Обратите внимание, что выполнение «mBluetoothGatt.connect ()» также будет использовать автоматическое соединение.

Опасайтесь https://code.google.com/p/android/issues/detail?id=69834, что является ошибкой, затрагивающей более старые версии Android, которые могут сделать ваши автоматические подключения напрямую. Это можно обойти с reflectionм.

Существует несколько неописанных различий между прямым и автоматическим подключением:

Прямое подключение – попытка подключения с тайм-аутом 30 секунд. Он будет приостанавливать все текущие автосоединения, пока выполняется прямое соединение. Если в настоящее время ожидает прямого подключения, последнее прямое соединение не будет выполнено немедленно, а скорее поставлено в очередь и начнется, когда предыдущий закончен.

При автоматическом подключении вы можете одновременно подключать несколько ожидающих соединений, и они никогда не будут таймаутировать (до тех пор, пока они явно не прерваны или пока не отключится Bluetooth).

Если соединение было установлено через автосоединение, Android автоматически попытается подключиться к удаленному устройству, когда он отключится, пока вы вручную не вызовете disconnect () или close (). Как только соединение установлено через разъемы прямого подключения, не предпринимаются попытки повторно подключиться к удаленному устройству.

Прямое соединение имеет другой интервал сканирования и окно сканирования с более высокой нагрузкой, чем автосоединение, то есть он будет выделять больше времени на радио для прослушивания подключаемых рекламных объявлений для удаленного устройства, то есть соединение будет установлено быстрее.

  • startLeScan с 128-битными UUID не работает в собственной реализации BLE на Android
  • Interesting Posts

    Удаление символов строки строки из строки Java

    Ошибка сборки Visual Studio: невозможно скопировать exe-файл из obj \ debug в bin \ debug

    Java: разница между A x = new A () и A x = new B (), когда B расширяет A

    Ожидаемый секторный вопрос. Означает ли это, что HDD не работает?

    UIPopOverController для iPhone (в настоящее время доступен только для iPad)

    WINDOWS: возврат / восстановление прав владения по умолчанию Разрешения каталога

    Каков самый простой способ заказать / в jQuery?

    Может ли FFmpeg использоваться в качестве библиотеки вместо автономной программы?

    Генераторы барьеров памяти

    Как изменить название легенды в ggplot

    Удалите Mac OS X и установите Windows?

    Использование jQuery .live с событием toggle

    Android YouTubePlayer с несанкционированным наложением поверх проигрывателя

    Как выбрать адреса и сервер DNSMasq для PPTP VPN-клиента (в DD-WRT)?

    Android – обновить контакт

    Давайте будем гением компьютера.