You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:22:26