BLE - первое соединение с приложением не работает - PullRequest
0 голосов
/ 04 марта 2019

Я работаю с устройством Texas, для управления светодиодом, в моем собственном приложении для Android.Устройство включило сопряжение с паролем по умолчанию 000000.В моем коде для приложения у меня есть эта часть кода для чтения сопряженного устройства.

    private void getpaireddevices(){
    Set<BluetoothDevice> devicesArray = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
    if(devicesArray.size() > 0) {
        for(BluetoothDevice device : devicesArray) {
            device.getName();
            device.getAddress();
        }
    }
}

В этот момент, когда я включаю BLE, приложение обнаружило устройство, оно подключается, но не работает.Чтобы это работало, я должен выйти и снова подключиться к своему устройству.Почему?

1 Ответ

0 голосов
/ 04 марта 2019

Это возможно, если устройство уже подключено.Вызовите метод removeBond(), чтобы очистить предыдущее состояние соединения.

device.removeBond();

Для проверки состояния соединения BluetoothDevice используйте getBondState().

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

Пожалуйста, прочитайте это: BLE Device Bonding автоматически удаляется в Android

Метод unpairDevice() отключит соединение Bluetooth.

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();

for (BluetoothDevice bt : pairedDevices) {
        if (bt.getName().contains("String you know has to be in device name")) {
            unpairDevice(bt);
        }
}

// Function to unpair from passed in device
private void unpairDevice(BluetoothDevice device) {
    try {

        Method m = device.getClass().getMethod("removeBond", (Class[]) null);
        m.invoke(device, (Object[]) null);
    } catch (Exception e) { Log.e(TAG, e.getMessage()); }
}
...