我正在开发一个Android应用程序,它可以与热打印机进行通信,以便打印一些收据。
下面是我向打印机发送数据以便打印收据的代码:
connection.claimInterface(usbInterface, forceClaim)
val thread = Thread {
connection.bulkTransfer(
mEndPoint,
printer.toByteArray(),
printer.size(),
0
)
connection.close()
}
thread.run()如果热感打印机里有纸,这段代码可以正常工作,但是如果热感打印机里没有纸,它只是冻结了我的应用程序,我必须完全重新启动设备。我知道,根据文档,bulkTransfer方法中的bulkTransfer 0被定义为无限,所以我想这就是我获得ANR的原因。
我试着将超时时间设置为4000,但问题是,如果收据打印时间超过4秒,它就会在这4秒之后停止打印操作。
知道我怎么处理这事吗?
发布于 2022-02-17 16:26:33
这是热收据打印机的常见情况。
如果没有纸,封面(打印头?)是打开的,或者打印是不可能的,因为有一些错误,没有通信或者只是数据存储在打印机缓冲区中,它将无法工作。
也许在大宗运输过程中也发生了类似的事情。
然后,根据要打印的数据量来实际地进行纸输入,如果您使用它与剪纸刀,它将需要时间来操作。它们不是固定的时间。
根据打印机支持的功能,您可能能够或可能无法这样做。
如果打印机支持RS232C硬件流控制仿真,则在发生错误时关闭流控制信号线,因此您可以通过打印前检查信号线的状态来确定打印是否可行。
然后,如果您可以在错误状态下进行通信并支持命令通知打印机状态(称为实时命令),则在打印之前发送该命令以接收指示打印机状态的数据。通过检查它,您可以确定是否可以以与上面相同的方式打印。
传输实时状态
如果这样的预检查是可能的,您将能够发现问题比执行超时检查更快。
https://stackoverflow.com/questions/71160729
复制相似问题