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

Chrome应用通过蓝牙热敏打印机RPP02N打印无输出求助

问题:Chrome通过蓝牙热敏打印机RPP02N打印无内容输出

已完成蓝牙配对并启用自定义PrintService,打印时仅显示进度但无内容输出,实现代码如下:

1. onStartPrinterDiscovery方法

public void onStartPrinterDiscovery(List<PrinterId> priorityList) {
      if (!priorityList.isEmpty()) {
          return;
      }

      // RPP02N 66:12:29:4F:06:1C | 54:47:41:07:70:79 || 66:12:29:4F:06:1C

      final List<PrinterInfo> printers = new ArrayList<>();
      final PrinterId printerId = generatePrinterId("66:12:29:4F:06:1C");
      final PrinterInfo.Builder builder = new PrinterInfo.Builder(printerId, "RPP02N", PrinterInfo.STATUS_IDLE);
      PrinterCapabilitiesInfo.Builder capBuilder = new PrinterCapabilitiesInfo.Builder(printerId);
      capBuilder.addMediaSize(PrintAttributes.MediaSize.ISO_A4, true);
      capBuilder.addMediaSize(PrintAttributes.MediaSize.ISO_A3, false);
      capBuilder.addMediaSize(PrintAttributes.MediaSize.NA_INDEX_4X6, false);
      capBuilder.addResolution(new PrintAttributes.Resolution("resolutionId", "default resolution", 600, 600), true);
      capBuilder.setColorModes(PrintAttributes.COLOR_MODE_MONOCHROME, PrintAttributes.COLOR_MODE_MONOCHROME);
      builder.setCapabilities(capBuilder.build());
      printers.add(builder.build());
      addPrinters(printers);
  }

2. onPrintJobQueued方法

protected void onPrintJobQueued(PrintJob printJob) {
      final PrintDocument document = printJob.getDocument();

      final FileInputStream in = new FileInputStream(document.getData().getFileDescriptor());
      try {
          final byte[] buffer = new byte[4096];
          in.read(buffer);
      } catch (IOException e) {
          Log.d("myprinter", "", e);
      } finally {
          try {
              in.close();
          } catch (IOException e) {
              assert true;
          }
      }
      printJob.complete();
  }
解决思路
  • 核心问题:未向打印机传输数据
    当前onPrintJobQueued仅读取了文件内容但完全没有和蓝牙打印机建立连接并发送数据,直接标记任务完成,这是无输出的根本原因。

  • 步骤修复建议

    1. 建立蓝牙连接:
      利用打印机MAC地址66:12:29:4F:06:1C获取BluetoothDevice实例,通过createRfcommSocketToServiceRecord方法创建RFCOMM套接字(传入SPP服务UUID:00001101-0000-1000-8000-00805F9B34FB),调用connect()建立连接。
    2. 正确读取并发送打印数据:
      循环读取打印文档直到文件结束,而非仅读取一次4096字节;将读取到的字节通过蓝牙套接字的输出流发送给打印机。注意热敏打印机需要ESC/POS指令(如换行、切纸),若Chrome生成PDF等格式,需先转换为打印机支持的格式(如位图转ESC/POS指令)。
    3. 处理异常与任务状态:
      连接失败或数据发送出错时,调用printJob.fail()标记任务失败;确保Manifest中声明蓝牙相关权限(BLUETOOTH、BLUETOOTH_ADMIN,Android 12+需BLUETOOTH_CONNECT、BLUETOOTH_SCAN),并获取运行时权限。
  • 打印机能力匹配调整
    RPP02N是热敏小票打印机,当前默认介质设为A4不匹配,需修改capBuilder.addMediaSize将NA_INDEX_4X6设为默认,避免Chrome生成不兼容的打印文档。

内容的提问来源于stack exchange,提问作者MrX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:15:01