【问题标题】:Detect out of paper with Brother Print SDK for QL series label printers使用适用于 QL 系列标签打印机的 Brother Print SDK 检测缺纸
【发布时间】:2021-08-31 14:11:35
【问题描述】:

我正在使用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。

【问题讨论】:

    标签: android brother-print-sdk


    【解决方案1】:

    也许在尝试打印之前尝试调用printer.getPrinterStatus()

    【讨论】:

    • 谢谢!不幸的是,该函数也仅在大约三分钟后返回,并在缺纸时返回错误代码 ERROR_COMMUNICATION_ERROR。
    【解决方案2】:

    阅读文档,似乎打印机能够将异步消息发送回您的应用程序。这可能有助于捕获各种信息,包括确定打印实际完成的时间。

    From the documentation:

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

    void setMessageHandle(Handler handler, int MsgType)
    

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

    MESSAGE_PAPER_EMPTY

    我想您会在打印机检测到缺纸状态后立即收到此消息。

    【讨论】:

    • 这是一个很好的答案,非常感谢您将我指向文档的那部分。我已经尝试过了,但不幸的是它似乎没有检测到缺纸情况;请查看我对原始问题的编辑。
    猜你喜欢
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多