Как подключиться к устройству 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? должен все объяснить.

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

Другие вопросы по тегам