我正在尝试使用 DantSu/ESCPOS-ThermalPrinter-Android 与蓝牙打印机建立连接,它工作得很好。然而,我看到代码执行的那一刻和打印纸张的那一刻有一些延迟(几秒钟)。例如,打印请求是实时发起的,但是打印机需要(我不确定蓝牙套接字是否)几秒钟(3-5秒)来打印。
然后我实现了一些逻辑来手动连接到蓝牙套接字
fun connectToBluetoothDeviceSync(device: BluetoothDevice,
callback: (isConnected: Boolean, socket: BluetoothSocket?, error: String?) -> Unit) {
try {
val uuid: String = when(getDeviceType(device)) {
DeviceType.PRINTER -> device.uuids[0].uuid.toString()
}
val bluetoothSocket: BluetoothSocket? = device.createRfcommSocketToServiceRecord(
ParcelUuid.fromString(uuid).uuid
)
bluetoothSocket?.connect()
callback(bluetoothSocket?.isConnected == true, bluetoothSocket, null)
} catch (e: java.lang.Exception) {
logE("Bluetooth Device Connect Async Error: ${e.message}")
callback(false, null, e.message ?: "Couldn't connect")
}
}
连接需要一些时间,但有时会有所不同。有时它会在 1 秒内连接,或者需要几秒钟,或者在大约 10 秒后超时。但是,代码在几毫秒内执行,但打印机需要时间来打印数据。蓝牙热敏打印机通讯延迟这么大,而IP、USB打印机打印1-2秒以内,正常吗?
完全取决于打印机。打印机本身可能不会立即开始打印。如果有更多数据到来并且需要超时,它可能会等待。可能需要清洁打印头。它可能需要预热热量。打印可能无法自动进行的原因有很多,与移动端的代码无关。如果你说它在几秒钟内打印出来,我认为这就足够了。