在线程中打开套接字并返回整个套接字?

时间:2018-04-02 16:31:49

标签: android multithreading bluetooth

也许有人可以告诉我该怎么做。

我目前有一个Android应用程序,当我选择一个数据记录并点击"发送"时,它通过蓝牙(createRfcommSocketToServiceRecord)发送短消息。代码看起来像这样

        mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
        if(mmSocket.isConnected()) {
            mmSocket.close();
        }
        mmSocket.connect();
        OutputStream mmOutputStream = mmSocket.getOutputStream();
        mmOutputStream.write(fullMsg.getBytes());
        mmOutputStream.close();
        mmSocket.close();

这有效,但在某种程度上是不可靠的。 mmSocket.connect()在超时时至少有50%的时间失败,我不认为蓝牙连接的另一端是问题所在。

所以我想在应用程序启动后立即尝试建立连接(或者只要另一个端点已经配对 - 就可以看到),但我不希望我的应用程序在运行时冻结.connect。因此,我必须在一个线程中运行蓝牙套接字(应该没问题),并且我必须返回mmSocket连接才能在以后使用它。这是正确的方法,如果是这样的话 - 如何在不等待主过程中的线程的情况下从胎面返回mmSocket对象。

非常感谢:)

1 个答案:

答案 0 :(得分:1)

您可以使用套接字在类中创建一个静态字段,并从主线程

中获取它