Как подключиться к устройству BLE впервые (Android)
Я просматривал BluetoothGatt.java и нашел метод логического соединения (логическое автоконнект, обратный вызов BluetoothGattCallback, обработчик обработчика)
В документации чуть выше этого метода указано, что это используется для инициирования соединения с устройствами BLE.
Тем не менее, в официальной документации Android указано, что для подключения к устройству BLE следует использовать boolean connect().
В документации для этого метода connect () указано, что он используется для повторного подключения к устройству.
Я смущен здесь, потому что gatt.connect()
иногда ненадежен (обратный вызов для подключенного устройства не вызывается, даже если устройство BLE находится в зоне действия, но подключается, когда я пытаюсь подключиться во второй или третьей попытке.)
Было бы лучше использовать метод, упомянутый ранее, чтобы увеличить шансы на соединение во время первой попытки подключения?
Кто-нибудь может поделиться информацией об этом?
2 ответа
Однако в официальной документации Android говорится, что для подключения к устройству BLE следует использовать Boolean connect().
Вышеуказанный метод - это метод Bluetooth Gatt, который поможет вам подключиться к любому устройству. после успешного подключения BluetoothGatt вызовет BluetoothGattCallback, у которого есть разные методы переопределения.
Согласно моей реализации, я обнаружил устройство с помощью BluetoothAdapter.LeScanCallback, который используется для более низкой версии. После этого:-
private void addDeviceItem(BluetoothDevice device, int rssi) {
String penAddress = device.getAddress();
mBluetoothLeService.connect(penAddress );
}
public boolean connect(final String address) {
if (mBluetoothAdapter == null || address == null) {
Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
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, false, mGattCallback);
// refreshDeviceCache(mBluetoothGatt);
Log.d(TAG, "Trying to create a new connection.");
mConnectionState = STATE_CONNECTING;
return true;
}
Я всегда буду подключаться к устройству, после завершения Bluetooth вы должны отключиться от устройства, вызвав Gatt.disconnect(). затем снова установите соединение, используя приведенный выше код.
Мой ответ на Какой правильный флаг autoConnect в connectGatt BLE? должен все объяснить.
По сути, "прямое подключение" имеет большую нагрузку окна / интервала сканирования, чем "автоматическое подключение". Вот почему автоматическое подключение может занять очень много времени, если у вас большой рекламный интервал на периферии.