有没有办法将连接超时设置为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
答案 0 :(得分:5)
您无法更改BluetoothSocket.connect()的超时。作为文档:
此方法将阻止,直到建立连接或连接失败。如果此方法在没有异常的情况下返回,则此套接字现已连接。 解决方法。
例如:超时5秒。使用CountDownTimer检查连接是否完成(成功还是失败)。 5秒后,如果连接不完整,则使用BluetoothSocket.close()取消。
作为BluetoothSocket文档:
close()可用于从另一个线程中止此调用。
答案 1 :(得分:0)
好的,这段代码只是经过了轻微的测试,但到目前为止还是有效:
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();
}
}
});
我希望这会有所帮助。
答案 2 :(得分:0)
socket.connect(); 在建立连接或建立连接之前,此方法将一直阻塞 so.if连接无法建立。 Thread.sleep(1000); 不会执行。 或socket.connect()之后的其他方法;也不会执行。