识别android rfcomm何时失去连接

识别android rfcomm何时失去连接,android,bluetooth,Android,Bluetooth,当我的蓝牙设备(GPS记录器)暂时超出范围时,我希望能够优雅地处理这种情况,例如,当我一直在愉快地通信时,我意外地走到墙后。在这种情况下,连接丢失,必须重新建立,但我找不到如何识别它丢失。数据正从设备中“推送”,并且数据包中可能存在相当有效的延迟 即使在关闭设备时,socket.isConnected()函数也会返回true。 我希望控制器堆栈协议有一个属性,它必须维护无线信道,但我还没有找到是否/如何访问它。 我知道我可以在计时器循环中实现ACK/NACK,但这似乎有点像重新发明轮子。我过去所

当我的蓝牙设备(GPS记录器)暂时超出范围时,我希望能够优雅地处理这种情况,例如,当我一直在愉快地通信时,我意外地走到墙后。在这种情况下,连接丢失,必须重新建立,但我找不到如何识别它丢失。数据正从设备中“推送”,并且数据包中可能存在相当有效的延迟
即使在关闭设备时,socket.isConnected()函数也会返回true。 我希望控制器堆栈协议有一个属性,它必须维护无线信道,但我还没有找到是否/如何访问它。

我知道我可以在计时器循环中实现ACK/NACK,但这似乎有点像重新发明轮子。

我过去所做的是尝试从套接字获取输入流。如果未连接,则会出现一些异常。在这种情况下,您将知道连接已丢失,因为您无法从蓝牙设备收到任何消息。

是的,这似乎是我所看到的示例中使用的方法,例如BloetoothChatService。我只是看起来有点不可靠。但也许这是最好的解决办法。谢谢。BluetoothChatService中使用的方法,即围绕mmInStream.readMessage进行try/catch,在连接断开时不会引发异常。更正。是的,在未连接时尝试读取输入流上的()会引发IOException。 socket.isConnected()