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