Android: BluetoothSocket время ожидания readLine - PullRequest
3 голосов
/ 10 ноября 2011

Я должен вставить тайм-аут в readLine для входного потока Bluetooth.

    BluetoothDevice device = BluetoothAdapter.getDefaultAdapter()
            .getRemoteDevice("00:00:00:00:00:00");

    sock = device.createInsecureRfcommSocketToServiceRecord(UUID
            .fromString(insecureUUID));
    sock.connect();

    in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    String line = in.readLine(); //if no answer from device..i'll wait here forever

    do { [...]

    } while ((line = in.readLine()) != null);

Соединение работает нормально, но у меня есть последовательный преобразователь Bluetooth, связанный с другим устройством.Если второй выключен, я буду ждать вечно на readLine.Есть ли шанс, что я могу выбросить исключение или тайм-аут?Спасибо !!

1 Ответ

1 голос
/ 22 июня 2014

У меня была такая же проблема, и я решил ее, создав 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.Затем исключение обрабатывается.

...