【问题标题】:Android bluetooth printer - detect disconnection/write failure event?Android蓝牙打印机 - 检测断开/写入失败事件?
【发布时间】:2018-08-12 03:30:03
【问题描述】:

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

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

这是编写消息的代码:

 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() 的阻塞调用。

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    试试这个打印长消息

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

    检查连接

    outputStream = bluetoothSocket.getOutputStream();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 2012-04-07
      • 2018-06-25
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多