Android蓝牙输出流与POS打印机断开连接

时间:2015-08-28 11:31:20

标签: java android sockets printing bluetooth

我正在使用蓝牙ESC / POS打印机从Android设备打印发票。发票有两部分:

  1. 包含发票内容和
  2. 的字符串
  3. 二维码。
  4. 背景故事

    使用

    创建蓝牙套接字
    bluetoothSocket = printer.createRfcommSocketToServiceRecord(uuid);
    bluetoothSocket.connect();
    

    并使用

    打开输出流
    if(bluetoothSocket.isConnected()) outputStream = bluetoothSocket.getOutputStream();
    

    我通过两个步骤将发票传递给输出流(首先是发票内容字符串,然后是QR位图 - 两个对象都在被调用的方法内转换为字节数组)

    outputStream.write(data);
    

    其中databyte[]。在打印之前和之后,我打电话,以防万一,发送命令进行初始化的重置方法。

    打印部分如下

    Bitmap bitmapQR = QRgenerator.generate();
    BluetoothPrinter usersPrinter = new Printer();
    usersPrinter.findPrinter();
    usersPrinter.connectPrinter(); // init is sent
    usersPrinter.sendDataText(invoiceString, EscPosCommands.ALIGN_LEFT); // print invoice string
    usersPrinter.sendDataBitImage(bitmapQR); // print QR code
    usersPrinter.resetPrinter(); // init is sent once again
    //usersPrinter.disconnectPrinter(); // problematic
    

    断开打印机连接的问题方法是

    if(bluetoothSocket.isConnected()) {
       outputStream.close();
       bluetoothSocket.close();
    }
    

    问题

    • 打印发票和关闭输出流和蓝牙插座的断开方法时,称为,打印机停止 响应。进纸按钮不起作用。有时在打印QR码时,打印过程会在打印完成之前像流关闭一样停止。我不理解这种行为,因为在QR打印方法之后调用disconnect方法。我没有看到打印被取消的原因。
    • 打印发票并且未调用断开方法 时,打印机显然等待几秒钟(例如15秒)的更多数据。在带有状态LED的型号上,指示灯亮起。暂停后,打印机再次可用。我相信打印机会以某种方式自动重置连接本身,并且插座保持连接状态。

    问题

    如何关闭Android设备和蓝牙之间的连接     打印机,以便打印过程成功完成,打印机将准备好不间断地打印新发票?

    更新

    我在应用程序运行时已经连接了蓝牙套接字。在那之后我改变了程序,以便最后不打印QR码 - 首先打印一些文本,然后是位图,然后再打印一些文本。在这种组合中,打印与打印机之间没有任何延迟。

    这让我想知道打印机是否保持光栅位图像模式。我再次计算了一切,命令有效。

    用于打印位图的十六进制命令是0x1D 0x76 0x30 m xL xH yL yH d1...dk。如果用于尺寸为255x255 px的位图,则十六进制字节数组命令为

    0x1D 0x76 0x30 0x00 0x20 0x00 0xFF 0x00 bitmap[8160]
    

    其中bitmap[8160]是一系列位图字节,长度为8160,等于0x20 * 0xFF。

    然而,当打印完成后,init命令被发送到打印机,因此打印机应该重置。或者是吗?

    我注意到的另一件事是换行。如果在每个印刷部件P之后发送它们,如P1,进料,P2,进料,P3,进料......结果看起来更像P1,P2,P3,进料,进料,进料。为什么会这样?

0 个答案:

没有答案