2012-03-01 22 views
4

私はsock.connect()を呼び出すときに無期限にハングしてしまう問題があります。例外もタイムアウトもありません。Android Bluetoothソケットがハングアップする接続

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

他のアプリが既にBluetoothデバイスを使用していることが原因です。私は接続が失敗するようにしようとしていて、少なくとも別のアプリで既にデバイスが使用されていることを知らせるために例外や何かを投げています。

これに近づくための他の提案はありますか?

ありがとうございました。

+0

誰のアイデアを持っていませんか? – Jesse

+0

解決できますか?私は同様の問題に直面しています。 –

答えて

0

なぜあなたはThread.Sleepを呼び出していますか? BluetoothSocket.connectはブロッキング呼び出しです。これは、接続が成功したか、例外がスローされるまで、Thread.Sleepは呼び出されないことを意味します。

アクティビティでこれを呼びますか?これがあなたの活動を止めるでしょう。あなたはブルートゥース、受け入れスレッド、接続スレッドと接続されたスレッドを処理するために3つのスレッドが必要です。ここBluetoothChat例のように:

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