2011-11-10 2 views
3

블루투스 입력 스트림의 readLine에 타임 아웃을 삽입해야합니다.Android : BluetoothSocket readLine timeout

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); 

연결이 정상적으로 작동하지만 다른 장치에 연결된 블루투스 직렬 변환기가 있습니다. 두 번째 것이 꺼져 있으면 나는 readLine에서 영원히 기다릴 것입니다. 어떤 경우에 예외 또는 제한 시간을 throw 할 수 있습니까? 감사합니다.

답변

1

나는 동일한 문제가 있었고 스레드를 확장하는 ResponderThread를 작성하여 해결했습니다. 이 스레드는 일정 시간 동안 대기 한 후 입력 스트림 변수가 변경되었는지 여부를 확인합니다. 이 3 초 내에 응답이없고 실행이 내가 responderThread를 만들 클래스의 catch 블록에 들어가는 경우 내 케이스 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. 
} 

소켓을 닫습니다. 그런 다음 예외가 처리됩니다.