Я работаю над приложением Bluetooth, в котором я пытаюсь подключить одно из устройств Bluetooth (сопряженных), которые были отсканированы с помощью адаптера Bluetooth. Я пытаюсь подключить BluetoothSocket.connect () в потоке фоновой службы, но он выдает IOException: «ошибка чтения, сокет может быть закрыт или истекло время ожидания, чтение ret: -1» каждый раз.
Я имею в виду Android Образец кода BluetoothChat GitHub Пример кода. В проекте BluetoothChat BluetoothSocket.connect () работает правильно, когда приложение находится на переднем плане, но когда приложение на заднем плане, оно выдает мне то же исключение.
BluetoothDevice btDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(address); //address = "98:0C:A5:CF:34:8B"
connect(btDevice, true);
public synchronized void connect(BluetoothDevice device, boolean secure) {
// Cancel any thread
if (connectThread != null) {
connectThread.cancel();
connectThread = null;
}
// Start the thread to connect with the given device
connectThread = new ConnectThread(device, secure);
connectThread.start();
}
// Unique UUID for this application
private static final UUID MY_UUID_SECURE =
UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
private static final UUID MY_UUID_INSECURE =
UUID.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");
// runs while attempting to make an outgoing connection
private class ConnectThread extends Thread {
private final BluetoothSocket socket;
private String socketType;
private ConnectThread(BluetoothDevice device, boolean secure) {
BluetoothSocket tmp = null;
socketType = secure ? "Secure" : "Insecure";
try {
if (secure) {
tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE,
MY_UUID_SECURE);
} else {
tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(
NAME_INSECURE, MY_UUID_INSECURE);
}
} catch (IOException e) {
e.printStackTrace();
Log.e(BluetoothWebSocket.class.getSimpleName(), "bt connect: " + e.getMessage());
}
socket = tmp;
}
public void run() {
setName("ConnectThread" + socketType);
// Always cancel discovery because it will slow down a connection
BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
// Make a connection to the BluetoothSocket
try {
socket.connect();
} catch (IOException e) {
e.printStackTrace();
Log.e(BluetoothWebSocket.class.getSimpleName(), "bt connection error: " + e.getMessage());
try {
socket.close();
} catch (IOException e2) {
Log.e(BluetoothWebSocket.class.getSimpleName(), "bt connection IO error: " + e2.getMessage());
}
btConnectResult = "{\"bt_connection_result\":\"failed\"}"; //scanned result failed
return;
}
btConnectResult = "{\"bt_connection_result\":\"success\"}"; //scanned result success
}
boolean cancel() {
try {
socket.close();
return true;
} catch (IOException e) {
Log.e(BluetoothWebSocket.class.getSimpleName(), "bt connection cancel error: " + e.getMessage());
return false;
}
}
}
Если у кого-то есть идеи, как решить эту проблему, пожалуйста, поделитесь.
ТИА.