Массовая передача Android USB на принтер завершается без ошибокAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Массовая передача Android USB на принтер завершается без ошибок

Сообщение Anonymous »

У меня есть довольно обычный код, который пытается распечатать на USB-принтере, и хотя сообщений об ошибках нет, принтер, по-видимому, получая все байты, ничего не делает: не печатает и не сигнализирует об ошибке.
Я удалил ведение журнала и проверку ошибок из этого кода, чтобы отображались только соответствующие строки, но разрешения предоставлены, интерфейс правильный, имеет класс и подкласс принтера, все они были тщательно проверены.

Код: Выделить всё

val config = device.getConfiguration(configIndex)
val interfaze = config.getInterface(interfazeIndex)
val endpoint = interfaze.getEndpoint(endpointIndex)
if (endpoint.direction == DIRECTION_OUT && endpoint.type == USB_ENDPOINT_XFER_BULK) {
UsbManager.openDevice(device)?.also { connection ->
connection.claimInterface(interfaze, true)
val bytes = resource.readBytes()
Thread {
for (buffer: ByteArray in bytes.chunks(endpoint.maxPacketSize)) {
val result = connection.bulkTransfer(endpoint, buffer, buffer.size, 0)
if (result < 0) return@Thread
}
val result = connection.bulkTransfer(endpoint, byteArrayOf(0), 0, 0)
connection.releaseInterface(interfaze)
connection.close()
}.start()
}
}
Я пробую и BulkTransfer(), и UsbRequest(), симптомы те же. Все передачи возвращаются без ошибок, с подтверждением ожидаемого количества байт, все передаваемые данные учитываются.
Я могу найти только один подозрительный элемент в logcat — прежде чем установить соединение, я есть следующие строки:

Код: Выделить всё

usbhost                 system_server                        I  usb_device_open /dev/bus/usb/002/002
usbhost                 system_server                        I  usb_device_open open returned 339 writeable 1 errno 0
usbhost                 system_server                        I  usb_device_new /dev/bus/usb/002/002 fd: 339
usbhost                 system_server                        I  usb_device_new read returned 195 errno 0
usbhost                 com.example.usbproof                 I  usb_device_new /dev/bus/usb/002/002 fd: 79
usbhost                 com.example.usbproof                 I  usb_device_new read returned 195 errno 11
UsbProof                com.example.usbproof                 D  connection=android.hardware.usb.UsbDeviceConnection@2425168
UsbProof                com.example.usbproof                 D  bytes=116200
Похоже, что система пытается открыть его раньше меня, и хотя это удается, мой последующий вызов получает ошибку EAGAIN (11). Почему это может быть так, что я могу сделать в этой ситуации и, дополнительный вопрос, почему меня не информируют о сбое на уровне приложения?
(Для справки: принтер работает, кабель в порядке, принтер правильно отвечает на запросы обнаружения USB с той же настройкой, только печать выше не работает.)

Подробнее здесь: https://stackoverflow.com/questions/792 ... hout-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»