微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在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 举报,一经查实,本站将立刻删除。