如何在Android上检测Brother打印机的型号?

问题描述

我正在使用Brother的Android SDK在Brother打印机中打印文档。我目前正在使用PJ-7626053,但是我希望能够在我的应用程序中支持任何兼容的模型。
我希望能够在引用其BluetoothDevice对象之后动态地检测打印机模型。 Brother的示例代码使用硬编码模型(下面的行settings.printerModel = Model.PJ_773;),但是我希望能够打印到任何兼容的Brother打印机。

兄弟示例代码:

void printImage(Bitmap bitmap) {
    // Specify printer
    final Printer printer = new Printer();
    PrinterInfo settings = printer.getPrinterInfo();
    settings.printerModel = Model.PJ_773;
    settings.port = PrinterInfo.Port.NET;
    settings.ipAddress = "your-printer-ip";
    settings.workPath = "Context.writable-dir-path";

    // Print Settings
    settings.paperSize = PaperSize.A4;
    settings.printMode = PrinterInfo.PrintMode.FIT_TO_PAGE;
    printer.setPrinterInfo(settings);

    // Connect,then print
    new Thread(new Runnable() {
        @Override
        public void run() {
            if (printer.startCommunication()) {
                PrinterStatus result = printer.printImage(bitmap);
                if (result.errorCode != ErrorCode.ERROR_NONE) {
                    Log.d("TAG","ERROR - " + result.errorCode);
                }
                printer.endCommunication();
            }
        }
    }).start();
}

链接到示例代码页:https://support.brother.com/g/s/es/htmldoc/mobilesdk/guide/print-image.html#pjmw-series

我的代码如下。如您所见,我当前正在使用设备名称来确定不理想的型号。如果我只是省略了赋值settings.printerModel = model;,则startCommunication()方法将返回false,并且打印失败。
是否可以动态且更可靠地检测模型?

public static void printTOIFormBitMap(Bitmap bitmap,BluetoothDevice btDevice) throws UnsupportedDeviceException {
    // Specify printer
    final Printer printer = new Printer();
    PrinterInfo settings = printer.getPrinterInfo();
    
    /********* TODO: detect model  *********/
    final String deviceName = btDevice.getName();
    if (deviceName == null) {
        throw new UnsupportedDeviceException();
    }
    PrinterInfo.Model model = null;
    if (deviceName.startsWith("PJ-762")) {
        model = PrinterInfo.Model.PJ_762;
    } else if (deviceName.startsWith("PJ-763")) {
        model = PrinterInfo.Model.PJ_763;
    }
    if (model == null) {
        throw new UnsupportedDeviceException();
    }

    settings.printerModel = model;
    /***************************************/

    // For Bluetooth:
    printer.setBluetooth(BluetoothAdapter.getDefaultAdapter());
    settings.port = PrinterInfo.Port.BLUETOOTH;
    settings.macAddress = btDevice.getAddress();
    // Print Settings
    settings.paperSize = PrinterInfo.PaperSize.A4;
    settings.printMode = PrinterInfo.PrintMode.FIT_TO_PAPER;
    settings.printQuality = PrinterInfo.PrintQuality.HIGH_RESOLUTION;
    settings.align = PrinterInfo.Align.CENTER;

    settings.isAutoCut = true;
    printer.setPrinterInfo(settings);

    new Thread(() -> {
        PrinterStatus result = null;
        boolean startCommunicationSuccess = printer.startCommunication();
        if (startCommunicationSuccess) { 
            result = printer.printImage(bitmap);
            RxBus.getInstance().publish(new PrintDoneEvent(result));
            printer.endCommunication();
        }
    }).start();
}

我知道我可以选择将文档共享给Brother iPrint&Scan应用程序,或者仅通过将Brother打印服务插件安装到手机中即可使用Android的本机打印功能。这两个选项都允许从任何应用程序中打印任何文档,而且我必须确保只有我的应用程序可以与打印机连接(运行我的应用程序的手机已自定义配置为仅允许安装预定的应用程序),所以我认为我必须使用SDK。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...