package com.printer.sdk.serial import android.bluetooth.BluetoothDevice import android.content.Context import android.hardware.usb.UsbDevice import android.os.Handler import android.os.Looper import android.util.Log import etelligens.com.foodsafety.PrintLabel.PrintClasses.DeviceCallback import java.io.File class Printing(private var printer: Printer, val context: Context) { private lateinit var printables: List private lateinit var messages:String // 将字符串转换为字节数组 private val byteArray = messages.toByteArray() private var serialPort = SerialPort(context); var printingCallback: PrintingCallback? = null var extraLinesAtEnd: Byte = 0 init { initSerialCallback() initDeviceCallback() } private fun initSerialCallback() { serialPort.setSerialPortCallback(object : SerialPortCallback { override fun onSerialPortTurningOn() {} override fun onSerialPortOn() { serialPort.connectToAddress() } override fun onSerialPortTurningOff() {} override fun onSerialPortOff() {} override fun onUserDeniedActivation() {} }) } private fun initDeviceCallback() { serialPort.setDeviceCallback(object : DeviceCallback { override fun onDeviceConnected(device: BluetoothDevice) { } override fun onDeviceDisconnected(device: BluetoothDevice, message: String) {} override fun onMessage(message: String) { } override fun onError(message: String) { } override fun onConnectError(device: BluetoothDevice, message: String) { } override fun onSerialDeviceConnected(device: File) { sendMessage() printPrintables() printingCallback?.printingOrderSentSuccessfully() } override fun onSerialDeviceDisconnected(device: File, message: String) { TODO("Not yet implemented") } override fun onSerialMessage(message: String) { printingCallback?.onMessage(message) } override fun onSerialError(message: String) { printingCallback?.onError(message) } override fun onSerialConnectError(device: File, message: String) { printingCallback?.connectionFailed(message) } override fun onUsbDeviceConnected(device: UsbDevice) { TODO("Not yet implemented") } override fun onUsbDeviceDisconnected(device: UsbDevice, message: String) { TODO("Not yet implemented") } override fun onUsbMessage(message: String) { TODO("Not yet implemented") } override fun onUsbError(message: String) { TODO("Not yet implemented") } override fun onUsbConnectError(device: UsbDevice, message: String) { TODO("Not yet implemented") } }) } private fun sendMessage() { serialPort.send(printer.initPrinterCommand) // init printer // send message serialPort.send(byteArray) //Feed 2 lines to cut the paper if (extraLinesAtEnd > 0) { serialPort.send(printer.feedLineCommand.plus(extraLinesAtEnd)) } Handler(Looper.getMainLooper()).postDelayed({ serialPort.disconnect() }, 300) } private fun printPrintables() { serialPort.send(printer.initPrinterCommand) // init printer this.printables.forEach { it.getPrintableByteArray(printer).forEach { ops -> serialPort.send(ops) } } //Feed 2 lines to cut the paper if (extraLinesAtEnd > 0) { serialPort.send(printer.feedLineCommand.plus(extraLinesAtEnd)) } Handler(Looper.getMainLooper()).postDelayed({ serialPort.disconnect() }, 300) } fun printMessage(messageStr: String) { this.messages = messageStr printingCallback?.connectingWithPrinter() if (!serialPort.isEnabled) { serialPort.enable(); } else{ serialPort.connectToAddress(); } //serialPort.onStart() } fun print(printables: ArrayList) { this.printables = printables printingCallback?.connectingWithPrinter() if (!serialPort.isEnabled) serialPort.enable() else serialPort.connectToAddress() //serialPort.onStart() } fun cutPaper() { var cutData = byteArrayOf(0x1d, 0x56, 0x00) try { if (serialPort.isEnabled) serialPort.send(cutData); } catch (e: Exception) { e.printStackTrace() } } }