如何使用Zebra Android SDK判断打印作业完成状态
Zebra Android SDK检测打印作业完成的解决办法
先说说你用^HV为啥不行
ZPL第一卷规范里的^HV是用来查询变量数据的,根本不是专门检测打印作业完成状态的命令,所以你拿它配合sendAndWaitForResponse等响应,肯定得不到预期结果,这方向从一开始就错了。
给你几个能用的方案
1. 使用~HQES状态查询命令
ZPL第一卷支持~HQES专门查询打印作业状态,搭配SDK的sendAndWaitForResponse方法即可:
- 先发送你的打印ZPL指令
- 再发送
~HQES命令等待响应 - 响应中的数字对应状态:
0=无作业(打印完成),1=作业正在打印,2=作业在队列中等待
代码示例:
// 假设已建立好打印机连接Connection connection String printZpl = "^XA^FO50,50^A0N,50,50^FD测试打印任务^FS^XZ"; // 发送打印任务 connection.write(printZpl.getBytes()); // 发送状态查询命令,超时设置为5秒 byte[] statusResp = connection.sendAndWaitForResponse("~HQES".getBytes(), 5000); String status = new String(statusResp); // 判断打印状态 if (status.contains("0")) { // 打印完成,执行后续逻辑 } else { // 作业仍在处理,可间隔一段时间后再次查询 }
2. 直接调用SDK的PrinterStatus类
Zebra Android SDK自带的PrinterStatus类可以直接获取打印机实时状态,通过轮询判断作业是否完成:
ZebraPrinter printer = ZebraPrinterFactory.getInstance(connection); // 循环轮询状态,每隔500毫秒查询一次 while (true) { PrinterStatus status = printer.getCurrentStatus(); if (status.isReadyToPrint() && !status.isPrinting()) { // 打印作业已完成,跳出循环 break; } Thread.sleep(500); }
3. 注册状态回调监听
如果你的SDK版本支持,可以注册状态监听器,实时接收打印机状态变化,无需手动轮询:
connection.addStatusNotificationListener(new StatusNotificationListener() { @Override public void onStatusChange(PrinterStatus status) { if (status.isReadyToPrint() && !status.isPrinting()) { // 此处处理打印完成后的逻辑 } } });
几点注意事项
- 确保打印机与设备的连接稳定,蓝牙/USB连接中断会导致状态查询失败
- 不同型号的ZPL第一卷打印机,状态响应格式可能略有差异,需对照对应打印机手册调整解析逻辑
- 避免过于频繁的状态查询,防止占用过多打印机资源
内容的提问来源于stack exchange,提问作者Camilo Romero
相关产品推荐
相关产品推荐

