0

我正在使用Brother Print SDK for Android。我的代码基于手册中所示的示例代码:

void printTemplate(int templateKey, String newText) {
// Specify Printer
final Printer printer = new Printer();
PrinterInfo settings = printer.getPrinterInfo();
settings.printerModel = Model.QL_1110NWB;
settings.ipAddress = "your-printer-ip";

// Connect, then print
new Thread(new Runnable() {
    @Override
    public void run() {
        if (printer.startCommunication()) {
            // Specify the template key and the printer encode
            if (startPTTPrint(templateKey, null)) {
                // Replace text object with new text
                replaceText(newText);

                // Start print
                PrinterStatus result = printer.flushPTTPrint();
                if (result.errorCode != ErrorCode.ERROR_NONE) {
                    Log.d("TAG", "ERROR - " + result.errorCode);
                }
            }
            printer.endCommunication();
        }
    }
}).start();

}

当打印机的盖子打开时,flushPTTPrint() 函数会立即返回 ERROR_COVER_OPEN 状态。这太棒了。

当打印机缺纸时,flushPTTPrint() 函数仅在大约三分钟后返回,状态为 ERROR_COMMUNICATION_ERROR。不太好。

问题:如何检测打印机何时缺纸?任何方法都可以,要么让 flushPTTPrint() 在缺纸状态下立即返回,要么事先主动查询打印机。

编辑(回应马特克拉克的建议)

可以设置一个处理程序来处理来自打印机的状态消息。在常规打印输出中(以及在纸张为空之前的最后一次打印输出中),以下消息按此顺序到达:

  • MESSAGE_START_COMMUNICATION
  • MESSAGE_START_CONNECT
  • MESSAGE_END_CONNECTED
  • MESSAGE_START_SEND_STATUS_REQUEST
  • MESSAGE_END_READ_PRINTER_STATUS
  • MESSAGE_START_SEND_DATA
  • MESSAGE_END_SEND_DATA

当最后一张纸用完时,打印机立即打开红色 LED,并在其显示屏上显示缺纸通知。在这种情况下尝试打印时,会出现以下消息:

  • MESSAGE_START_COMMUNICATION
  • MESSAGE_START_CONNECT
  • MESSAGE_END_CONNECTED
  • MESSAGE_START_SEND_STATUS_REQUEST

……大约三分钟后……

  • MESSAGE_START_SOCKET_CLOSE
  • MESSAGE_END_SOCKET_CLOSE

永远不会看到缺纸消息 (MESSAGE_PAPER_EMPTY)。

编辑 2

我刚刚发现这个问题只发生在通过蓝牙连接时。使用 WiFi 时,上述函数会立即返回错误代码 ERROR_PAPER_EMPTY。

4

2 回答 2

1

阅读文档,似乎打印机能够将异步消息发送回您的应用程序。这对于捕捉各种事情可能很有用,包括确定打印何时真正完成。

从文档中

第 4.1.2.3 节展示了一种方法,您可以使用该方法为收到的这些消息注册回调:

void setMessageHandle(Handler handler, int MsgType)

第 4.2.2.13 节列出了所有可用的消息类型,其中之一是:

MESSAGE_PAPER_EMPTY

我想一旦打印机检测到缺纸状态,您就会收到此消息。

于 2021-08-31T14:31:31.367 回答
1

也许printer.getPrinterStatus()在尝试打印之前尝试打电话?

于 2021-08-31T14:21:54.137 回答