2017-03-03 102 views
0

BluetoothSocketに接続タイムアウトを設定する方法はありますか?BluetoothSocket - 接続タイムアウト

デバイスがオフラインの場合、接続プロセスは数秒かかるため、エラーが返されます。タイムアウトを1秒に設定する必要があります。可能です?

BluetoothSocket socket = device.createRfcommSocketToServiceRecord(APP_UUID); 
// socket.setProxyConnectionTimeout(1000); <- some like this 
socket.connect(); 

BluetoothSocketクラスが...答えを 感謝をPROXY_CONNECTION_TIMEOUTを持っていますが、使用されることはありません。ところで

私はこのようないくつかを試してみてください。

socket.connect(); 
Thread.sleep(1000); 
socket.close(); // but socket is not closed & still connecting 

答えて

4

あなたは)BluetoothSocket.connect(のタイムアウトを変更することはできません。ドキュメントとして:

このメソッドは、接続が確立されるか接続が失敗するまでブロックされます。このメソッドが例外なく返された場合、このソケットは現在接続されています。 回避策。

例:タイムアウト5秒。 CountDownTimerを使用して、接続が完了したかどうかを確認します(成功または失敗)。 5秒後に接続が不完全な場合は、BluetoothSocket.close()を使用してキャンセルしてください。 BluetoothSocketドキュメントとして

近い()別のスレッドからこの呼び出しを中止するために使用することができます。

0

[OK]を、このコードはわずかにテストされているが、それはこれまでの作品:

Task.Run(() => 
    { 
     while (true) 
     { 
      socket = pairedBTDevice.CreateRfcommSocketToServiceRecord(UUID.FromString(uuid)); 
      socket.ConnectAsync(); 
      Thread.Sleep(1000); 
      if (socket.IsConnected) 
      { 
       // call a function here 
       // my function blocks for the application lifetime 
       return; 
      } 
      else 
      { 
       socket.Close(); 
      } 
     } 

    }); 

私はこのことができます願っています。