Android蓝牙打印机 - 检测断线/写入失败事件?

时间:2018-03-04 10:01:34

标签: android sockets kotlin android-bluetooth bluetooth-printing

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

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

下面是编写消息的代码:

 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()仍然可以正常工作而不会抛出异常

    < / LI>

    关闭打印机后抛出异常的唯一方法是阻止调用 InputStream.read()

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

    提前致谢!

1 个答案:

答案 0 :(得分:0)

尝试使用此信息进行长信息打印

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

检查连接

outputStream = bluetoothSocket.getOutputStream();

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