Я пытался печатать с помощью Brother Print SDK 3.5.1 на Android 8.1.0. Я продолжаю получать ERROR_WRONG_LABEL
.
Это код, который я использую
void printPdf() {
// Specify printer
final Printer printer = new Printer();
PrinterInfo settings = printer.getPrinterInfo();
settings.printerModel = PrinterInfo.Model.QL_810W;
settings.port = PrinterInfo.Port.NET;
settings.ipAddress = "192.168.1.73";
settings.workPath = "storage/emulated/0/Download/";
// Print Settings
settings.labelNameIndex = LabelInfo.QL700.W62RB.ordinal();
settings.printMode = PrinterInfo.PrintMode.FIT_TO_PAGE;
settings.orientation = PrinterInfo.Orientation.PORTRAIT;
settings.isAutoCut = true;
printer.setPrinterInfo(settings);
// Connect, then print
new Thread(new Runnable() {
@Override
public void run() {
if (printer.startCommunication()) {
PrinterStatus result = printer.printPdfFile("/storage/emulated/0/Download/hello world red.pdf", 1);
if (result.errorCode != PrinterInfo.ErrorCode.ERROR_NONE) {
Log.d("TAG", "ERROR - " + result.errorCode);
}
printer.endCommunication();
}
}
}).start();
}
Моя модель принтера - QL-810W, и я использую черно-красный рулон W62.
- Я пробовал Sample Application , где настройка
W62RB
в labelNameIndex
печатает нормально. - Замена рулона на другой с другой шириной не помогла.
- Я также пробовал перебирать числа от 0 до 50 и использовать их как
labelNameIndex
. - На основе этого потока я подумал, что проблема может быть в с указанием атрибута
workPath
. Установка workPath
на getContext().getCacheDir().getPath()
приводит к ERROR_OUT_OF_MEMORY
вместо ERROR_WRONG_LABEL
. Если не указать workPath
и добавить <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
к AndroidManifest.xml
, получится ERROR_WRONG_LABEL
EDIT
Я изменил приложение Brother Sample и загрузил его на GitHub . Приложение теперь запускает Activity_PrintPdf.java
по умолчанию, где я вставил свой код печати с жестко заданными значениями в начале метода onCreate
- этот отлично работает и печатает файл PDF, как ожидалось.
Затем я создал новый проект «Пустое действие» в Android Studio, скопировал вставленную библиотеку, добавил импорт в build.gradle
и скопировал вставленные разрешения в AndroidManifest.xml
. Затем я копирую вставленный код печати в начало метода onCreate
в MainActivity.java
. Запуск приложения приводит к появлению ERROR_WRONG_LABEL
.
Это - модифицированный рабочий пример приложения, а это - тот, который вызывает ошибку. Я хочу использовать код как собственный модуль, который я вызываю из своего приложения React Native, поэтому важно, чтобы мне удалось настроить код печати с нуля, а не изменять существующий пример приложения.
EDIT 2
Я проверил библиотеку с помощью отладчика: при выполнении printer.setPrinterInfo(mPrinterInfo)
библиотека внутренне вызывает private boolean createWorkPath(String dirPath)
объекта Printer
. При возврате из этого метода отладчик показывает Source code doesn't match the bytecode
и, кажется, забывает созданный каталог. Это также внутренне устанавливает mResult.errorCode = ErrorCode.ERROR_WORKPATH_NOT_SET
. Однако вместо того, чтобы вызывать здесь какую-либо ошибку, код просто продолжает работать, что позже приводит к ERROR_WRONG_LABEL
при попытке печати. Запуск того же фрагмента кода в модифицированном приложении Sample работает нормально.
Я был бы признателен, если бы вы могли помочь или подсказать, что попробовать дальше.
Спасибо!