Android печать с помощью Brother SDK через Wi-Fi выдает ошибку ERROR_WRONG_LABEL, несмотря на правильный выбор labelNameIndex - PullRequest
0 голосов
/ 03 августа 2020

Я пытался печатать с помощью 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 работает нормально.

Я был бы признателен, если бы вы могли помочь или подсказать, что попробовать дальше.

Спасибо!

1 Ответ

0 голосов
/ 10 августа 2020

Теперь я исправил проблему, которая заключалась в том, что библиотеке Brother не удалось создать временную папку, и вместо сообщения об ошибке она продолжала и не могла позже прочитать информацию на этикетке. На основе этого потока , теперь требуется указать разрешения на чтение и запись файла времени выполнения, а не разрешения времени компиляции в AndroidManifest.xml. Добавление

ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);

в начало onCreate перед кодом печати устранило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...