2011-12-14 7 views
3

나는 BluetoothSocket을 서버에 연결하려고하는데이 드문 상황이 발생했으며 연결 방법은 반환되지 않습니다. 이는 AsyncTask를 실행하고 작업이 결코 영원히 차단 등의 연결 완료되지제한 시간이있는 Android BluetoothSocket.connent

  device = _adapter.getRemoteDevice(_address); 
      socket = device.createInsecureRfcommSocketToServiceRecord(_uuid);       
      _adapter.cancelDiscovery(); 
      socket.connect(); 

... 이것은 또한 ('내가 할 수있는 여부를 아직 파악되지 않은 서버에 다시 연결하는 것을 방지 : 여기 내 코드입니다 BT를 완전히 사용하거나 동일한 대상 주소와 UUID를 사용하여 다시 연결할 수 없습니다. 타임 아웃으로 연결하는 방법이 있습니까?

답변

2

문제를 해결하는 한 가지 방법은 취소 (true) (AsyncTask 스레드를 방해 함)를 호출하거나 소켓에서 close()를 호출하여 AsyncTask를 중단시키는 것입니다. 예를 들어 socket.connect() 바로 전에 처리기에 지연 콜백을 게시하여 주 스레드가이를 수행 할 수 있습니다.이 콜백은 곧바로 제거됩니다. 귀하의 경우

post timeout callback to handler, with reference to socket or to this (AsyncTask) 
try { 
    socket.connect(); 
} catch (IOException e) { // and/or InterruptedException 
    couldn't connect 
} finally { 
    remove callback (this must be done here as the IO exception might be caused by something other than the timeout callback) 
} 
+0

이 좋은에서 그래서

, 나는 한 단계에서 그것을 자신을 생각 ...하지만 내 의견에 매우 우아 아니다. 더 나은 솔루션이 있는지 궁금해합니다. 글로벌 소켓 옵션 같은 것입니다. – smichak

관련 문제