BluetoothSocket - 连接超时

时间:2017-03-03 12:49:50

标签: android bluetooth

有没有办法将连接超时设置为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

3 个答案:

答案 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()之后的其他方法;也不会执行。