kotlin 与打印机的蓝牙通信延迟- Android

vtwuwzda  于 7个月前  发布在  Kotlin
关注(0)|答案(1)|浏览(96)

我试图使用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秒内打印?

odopli94

odopli941#

这完全取决于打印机。打印机本身可能不会立即开始打印。它可能会等待,以防更多的数据到来,需要超时。它可能需要清洁打印头。它可能需要预热热气流。打印可能不是自动的原因有很多,与移动的端的代码无关。这甚至不意味着打印机没有对数据做出React-它可能只需要在打印之前做一些其他的事情。如果你说它在几秒钟内打印出来,我会说这已经足够好了。

相关问题