У меня была такая же проблема, и я решил ее, создав ResponderThread, расширяющий поток.Этот поток ожидает определенное количество времени, и после этого он проверяет, изменилась ли переменная входного потока.
try {
bufferedReader = new BufferedReader(new InputStreamReader(
bluetoothSocket.getInputStream()));
responderThread = new ResponderThread(bluetoothSocket, ACCESS_RESPONSE);
responderThread.start();
response= bufferedReader.read();
} catch (IOException ioe) {
// Handle the exception.
}
В моем случае responsederThread закрывает сокет, если в течение 3 секунд нет ответа, и выполнение продолжаетсяв блок catch класса, где я создаю responsederThread.Затем исключение обрабатывается.