BluetoothSocket-连接超时

问题描述:

有什么方法可以设置对BluetoothSocket的连接超时?

It's there any way to set connection timeout to BluetoothSocket?

如果我的设备离线,则连接过程将花费几秒钟,然后返回错误.我需要将超时设置为1秒.有可能吗?

If my device is offline, connection process takes a few seconds and then returns an error. I need to set the timeout to 1 second. It is possible?

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

BluetoothSocket类具有PROXY_CONNECTION_TIMEOUT,但从未使用过... 感谢您的回答.

BluetoothSocket class have PROXY_CONNECTION_TIMEOUT, but never used... Thanks for answers.

顺便说一句:

我尝试这样:

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

您无法更改BluetoothSocket.connect()的超时.作为文档:

You can't change timeout of BluetoothSocket.connect(). As documentation:

此方法将一直阻塞,直到建立连接或连接失败为止.如果此方法无例外地返回,则表明该套接字已连接. 解决方法.

This method will block until a connection is made or the connection fails. If this method returns without an exception then this socket is now connected. A workaround.

例如:超时5秒.使用CountDownTimer检查连接是否完成(成功或失败). 5秒后,如果连接不完整,请使用BluetoothSocket.close()取消.

Ex: timeout 5s. Using CountDownTimer to check if connect is complete(success or fail). After 5s, if connection is incomplete then use BluetoothSocket.close() to cancel.

作为BluetoothSocket文档:

As BluetoothSocket documentation:

close()可用于中止另一个线程的调用.

close() can be used to abort this call from another thread.