подключаю два блютуз андроид смартфона.Проблема в том, что соединение может произойти в первый раз, во второй или третий раз.Я не мог определить характер проблемы.Устройство иногда подключается к серверу, а иногда не подключается.
Что я делаю:
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);
}
}
}
}