2012-03-01 152 views
4

我遇到了一個問題,當我調用sock.connect()時,它只是無限期地掛起。沒有例外,也沒有超時。Android藍牙套接字連接掛起

try 
    { 
     Method m = dev.getClass().getMethod("createRfcommSocket", new  Class[] {int.class});   
     sock = (BluetoothSocket) m.invoke(dev, 1); 
     sock.connect(); 
     Thread.sleep(100); 
     in = sock.getInputStream(); 
     out = sock.getOutputStream(); 
    } 
    catch(ConnectTimeoutException ex) 
    { 
     return false; 
    } 
    catch(IOException ex) 
    { 
     return false; 
    } 
    catch(Exception ex) 
    { 
     return false; 
    } 

原因是另一個應用程序已經在使用藍牙設備。我試圖讓我的連接失敗,至少拋出異常或讓我知道該設備已被其他應用程序使用。

任何其他建議來解決這個問題?

謝謝。

+0

沒有人有想法嗎? – Jesse 2012-03-01 14:37:03

+0

你能解決它嗎?我正面臨類似的問題。 – 2014-11-21 08:01:54

回答

0

你爲什麼叫Thread.Sleep? BluetoothSocket.connect是一個阻塞呼叫。這意味着你的Thread.Sleep不會被調用,直到連接返回成功連接或拋出異常。

你是在打個招呼嗎?因爲這會影響你的活動。你應該有3個線程來處理藍牙,接受線程,連接線程和連接的線程。就像在這裏的BluetoothChat示例中一樣:

http://developer.android.com/resources/samples/BluetoothChat/index.html