0

在我的应用程序中,两个设备通过蓝牙连接。在后台运行一个自己的蓝牙连接线程。(就像示例一样)当一个设备想要连接到另一台设备时,我希望在第二台设备上显示一个请求对话框。所以我想我必须修改AcceptThread。AcceptThread 必须通知我的 mainThread(例如使用处理程序)。

在 AcceptThread 我找到了这段代码:

                // This is a blocking call and will only return on a
                // successful connection or an exception
                socket = mmServerSocket.accept();

现在这是我的问题:这个“阻塞呼叫”一直在运行。我应该如何以及何时通知我的 mainThread 另一个设备想要连接?

4

1 回答 1

0

以后肯定。您想要的是.accept()的阻塞调用的结果。那是您代码中的套接字

这是来自 Android BluetoothServerSocket 文档的引用:

然后调用accept() 来监听传入的连接请求。此调用将阻塞,直到建立连接,此时,它将返回一个 BluetoothSocket 来管理连接。获取 BluetoothSocket 后,当不再需要接收连接时,最好在 BluetoothServerSocket 上调用 close()。关闭 BluetoothServerSocket 不会关闭返回的 BluetoothSocket。

所以不要忘记做:

 mmServerSocket.close()

在您正确接收到一个套接字(实际上是一个BluetoothSocket)之后,您可以根据用户的选择来选择如何处理它:

  • 如果他继续,您只需创建从套接字读取的 AsyncTask,直到 AsyncTask 被取消或发生异常(可能在蓝牙断开连接时)。
  • 如果他拒绝,只需取消套接字

如果您在阻塞呼叫期间收到异常,我将只返回主菜单敬酒,说某事失败。但是你可以做一个对话(比如重试?)

于 2012-10-31T13:59:30.150 回答