安卓蓝牙打印机 - 检测断开连接/写入失败事件?



我正在编写一个连接到蓝牙打印机并向其发送消息的应用程序。

但是,我没有找到正确的方法来检测写入打印机期间是否存在错误(例如打印机未连接或在写入过程中断开连接)

下面是写入消息的代码段:

try
{
val uuid = UUID.fromString(BLUETOOTH_CLASS)
val socket = bluetoothDevice.createRfcommSocketToServiceRecord(uuid)
bluetoothSocket = socket
socket.connect()
Thread.sleep(1000)
outputStream = socket.outputStream
outputStream?.write("Long long text...".toByteArray())
}
catch (e: Exception)
{
postFailOnUI(listener, GENERAL_ERROR)
}

如果我在打印机断开连接时发送消息,代码会落到异常块,这很好。

但是,如果我发送一条长消息(打印大约需要 3 秒),则OutputStream.write函数会在消息打印之前结束。

这是一个问题,因为如果在函数结束后断开连接,则消息将无法打印,并且我将无法注意到它。

我注意到的几件事:

  1. 当我关闭打印机时,连接到它(连接插座)后,socket.isConnected仍然返回true

  2. 当我打开输入流,然后关闭打印机时,InputStream.available()仍在工作而不会引发异常

关闭打印机后唯一引发异常的是InputStream.read()的阻止调用。

但是,这是检测写入失败的正确方法吗?

提前感谢!

尝试这个长消息打印

outputStream.write(message.getBytes(), 0, message.getBytes().length);

检查连接

outputStream = bluetoothSocket.getOutputStream();

这是检查蓝牙打印机连接状态的唯一方法。如果打印机已连接,则不会引发任何异常,否则会引发。

最新更新