0

我一直在尝试在 Android 8.1.0 上使用 Brother Print SDK 3.5.1 进行打印。我不断得到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 ApplicationW62RB ,其中的设置labelNameIndex打印效果很好。
  • 更换不同宽度的卷筒并没有帮助。
  • 我也尝试过迭代数字 0 到 50 并将它们用作labelNameIndex.
  • 基于这个线程,我认为问题可能在于指定workPath属性。设置workPathgetContext().getCacheDir().getPath()结果ERROR_OUT_OF_MEMORY而不是ERROR_WRONG_LABEL. 未指定workPath并添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>AndroidManifest.xml结果中ERROR_WRONG_LABEL

编辑

我已经修改了 Brother Sample 应用程序并将其上传到GitHub。该应用程序现在Activity_PrintPdf.java默认启动,我在onCreate方法开头插入带有硬编码值的打印代码 - 这工作正常并按预期打印 PDF 文件。

然后我在 Android Studio 中创建了一个新的 Empty Activity 项目,复制粘贴库,添加导入build.gradle并将权限复制粘贴到AndroidManifest.xml. 然后我将打印代码复制粘贴onCreateMainActivity.java. 运行应用程序会导致ERROR_WRONG_LABEL.

是修改后的工作示例应用程序,是导致错误的应用程序。我想将代码用作从我的 React Native 应用程序调用的本机模块,因此我设法从头开始设置打印代码而不是修改现有的示例应用程序非常重要。

编辑 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尝试打印时导致。在修改后的示例应用程序中运行相同的代码片段可以正常工作。

如果您能提供帮助或建议下一步尝试什么,我将不胜感激。

谢谢!

4

1 回答 1

0

我现在已经解决了这个问题,那就是 Brother 库默默地无法创建临时文件夹,而不是报告错误,而是继续并稍后读取标签信息失败。基于这个线程,现在需要指定运行时文件的读写权限,而不是AndroidManifest.xml. 添加

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

onCreate在打印代码修复问题之前的开头。

于 2020-08-10T13:42:30.370 回答