Bluetooth не всегда подключается с первого раза - PullRequest
0 голосов
/ 23 сентября 2019

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

Что я делаю:

1) Я создаю сервер.

2) Я создаю клиентаи попробуйте подключиться к серверу.

3) Если это не сработает, здесь я пытаюсь подключиться снова.

Сервер все это время продолжает ожидать подключения.У сервера нет времени ожидания.

Я также заметил, что попытка подключения занимает несколько секунд.В этом случае, если сервер не создан, то попытка подключения занимает около одной секунды.

Если смартфон не может подключиться, появляется ошибка:

2019-09-23 16:27:40.091 9475-9590/? E/Star.BT_Client: Unable to connect; close the socket and return
    java.io.IOException: read failed, socket might closed or timeout, read ret: -1
        at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:738)
        at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:750)
        at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:375)
        at com.Star.BtAndroid.BT_Client.TryConnect(BT_Client.java:61)
        at com.Star.BtAndroid.BT_Client.run(BT_Client.java:41)
    private final BluetoothSocket mmSocket;
    private final BluetoothDevice mmDevice;
    private static final String TAG = "BT_Client";
    public boolean isOk;

    public BT_Client(BluetoothDevice device, String MY_UUID) {
        BluetoothSocket tmp = null;
        mmDevice = device;

        try {
            tmp = device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));
        } catch (IOException e) {
            Log.e(TAG, "Socket's create() method failed", e);
        }
        mmSocket = tmp;
    }

    public void run() {
        int attemptConnectionCount = 0;

        while(attemptConnectionCount < 2){
            if (TryConnect()) break;
            attemptConnectionCount++;
            if (attemptConnectionCount == 2) {
                cancel();
                return;
            }
        }

        BT_P.bt_connectManager = new BT_ConnectManager(mmSocket);
        BT_P.bt_connectManager.start();
    }

    boolean TryConnect(){
        try {
            mmSocket.connect();
        } catch (IOException connectException) {
            Log.e(TAG, "Unable to connect; close the socket and return", connectException);
            return false;
        }
        return true;
    }

    public void cancel() {
        if (mmSocket != null){
            try {
                mmSocket.close();
            } catch (IOException e) {
                Log.e(TAG, "Could not close the client socket", e);
            }
        }
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...