我正在编写一个连接到蓝牙打印机并向其发送消息的应用程序。
但是,我没有找到正确的方法来检测在写入打印机过程中是否出现错误(例如打印机未连接,或在写入过程中断开连接)
这是编写消息的代码:
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函数会在消息打印之前结束。
这是一个问题,因为如果函数结束后发生断开连接,消息将不会被打印出来,我也不会注意到它。
我注意到的几件事:
当我关闭打印机时,连接到它(连接套接字)后,socket.isConnected仍然返回true
当我打开输入流,然后关闭打印机时,InputStream.available()仍然可以正常工作而不会引发异常
关闭打印机后唯一引发异常的是对InputStream.read()的阻塞调用。
但是,这是检测写入失败的正确方法吗?
提前致谢!