2011-05-18 225 views
1

嗨 我想实现一个蓝牙库,并在其中我想连接一次rfcomm套接字,然后在所有调用中重复使用它。 我想知道它是否连接,以便知道我是否应该调用connect方法。 我无法在蓝牙套接字的源代码中找到任何内容,因为它都是本机调用,并且在API中没有定义isConnected方法...有没有人有过这方面的经验?Android,BluetoothSocket - 如何判断连接是否已经存在,或者是否需要调用连接?

回答

1

我想你会有一个成员变量保持连接的状态。在成功的连接上将它设置为true,启动一个线程,该线程总是从套接字输入流中读取字节,并且如果在该线程上发生IOException,则将您的标志设置为false。

+0

因为我想写一个同步(阻塞)调用方法,我会做一个写然后马上读,这意味着我将无法维持循环并始终尝试读取的线程。然而,如果我理解你的答案是正确的,你说我应该假设,如果我从套接字的输入或输出流中得到一个读取异常,我可以认为连接已经死亡。那是对的吗? – ekatz 2011-05-19 15:15:19

+0

是afaik如果你得到任何ioexception,你可以认为它死了 – jkhouw1 2011-05-19 15:32:08

+0

是IO异常或“蓝牙断开”的意图告诉我们,连接已经死亡。检查出https://github.com/gtosoft/libvoyager/blob/master/src/com/gtosoft/libvoyager/android/ELMBT.java – 2011-05-19 16:53:34

1

我回答了类似的问题here。从API Level 14开始,可以使用BluetoothSocket类中的isConnected方法。对于较低的API级别,您可以打开一个套接字,完成您的工作并再次关闭它。然而,有些事情你可能需要考虑,更多的链接答案。

+0

某些设备总是返回false方法isConnected – Anthone 2015-02-12 14:40:39

+0

@Anthone afaik每规格应该工作。所以如果它不起作用,我会认为这是一个异常,它可能是有意义的提交错误报告。也可以暂时使用Icsmoretto的答案。 – AgentKnopf 2015-02-13 10:12:24

+0

谢谢,省去了接线不必要的代码 – Joseph 2017-08-20 20:42:46

1

isConnected()从来不适合我。 尝试是这样的:

try { 
    mSocket.connect() 
} catch (IOException e) { 
    // Create a new socket 
    // mSocket.connect(); 
} 
+1

如果列出isConnected不工作的设备并且可能为他们提供错误报告,这可能会有所帮助吗? – AgentKnopf 2015-02-13 10:10:28

相关问题